Comment faire pour télécharger des images, des documents word et/ou PDF via Trombone rails 4
Je voudrais permettre aux utilisateurs de télécharger des documents Word et PDF fichiers de mon application rails. Mon application est similaire à Pinterest application, les utilisateurs peuvent créer des Broches où ils joindre une photo suivie d'une description (utilisé Trombone de joindre l'image à la Pin).
Voici mon Broches modèle:
class Pin < ActiveRecord::Base
belongs_to :user
has_attached_file :image, :styles => { :medium => "300x300>", :thumb => "100x100>" }
validates_attachment :image, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png", "image/gif"] }
validates :image, presence: true
end
Mon Broches contrôleur:
class PinsController < ApplicationController
before_action :set_pin, only: [:show, :edit, :update, :destroy]
before_action :correct_user, only: [:edit, :update, :destroy]
before_action :authenticate_user!, except: [:index, :show]
def index
@pins = Pin.all.order("created_at DESC").paginate(:page => params[:page], :per_page => 15)
end
def show
end
def new
@pin = current_user.pins.build
end
def edit
end
def create
@pin = current_user.pins.build(pin_params)
if @pin.save
redirect_to @pin, notice: 'Pin was successfully created.'
else
render action: 'new'
end
end
def update
if @pin.update(pin_params)
redirect_to @pin, notice: 'Pin was successfully updated.'
else
render action: 'edit'
end
end
def destroy
@pin.destroy
redirect_to pins_url
end
private
def set_pin
@pin = Pin.find(params[:id])
end
def correct_user
@pin = current_user.pins.find_by(id: params[:id] )
redirect_to pins_path, notice: "Not authorized to edit this Pin" if @pin.nil?
end
def pin_params
params.require(:pin).permit(:description, :image)
end
end
Je me demande si j'ai juste besoin de créer un autre has_attached_file
méthode pour la documents Word et Pdf fichiers dans mon Pin modèle, puis de créer une vue pour les utilisateurs à télécharger le fichier.
OriginalL'auteur Cyzanfar | 2014-07-12
Vous devez vous connecter pour publier un commentaire.
Ça dépend...
Si vous souhaitez joindre une image ET un document dont vous avez besoin pour créer une autre forme de trombone attribut pour le document. Votre modèle:
Si vous souhaitez joindre une image OU un document, vous pouvez effectuer les opérations suivantes:
Si vous choisissez la première option, vous aurez besoin de deux fichiers d'entrées de votre point de vue, avec la deuxième une seule. Ce n'est pas de bonne ou de mauvaise. Cela dépend de ce que vous voulez faire.
:document
comme suit:<div class="form-group"> <%= f.label :document %><br> <%= f.file_field :document, class: "form-control" %> </div>
. Je l'ai essayé et il me donne une Erreurundefined method document_content_type'
. Quelque chose se passe avec mon Broches contrôleur :def create @pin = current_user.pins.build(pin_params) if @pin.save redirect_to @pin, notice: 'Pin was successfully created.' else render action: 'new' end end
.avez-vous d'exécuter
rails generate paperclip pin document
pour créer de la migration? Ce générateur va créer document_file_name, document_file_size, document_content_type et document_updated_at attributs sur votre Nip modèleViens de me rappeler de le faire : Ran ` rails generate migration add_file_to_pin " puis
rake db:migrate
. Fonctionne très bien maintenant. Je pense que MVC!Maintenant, pour les autres utilisateurs de visualiser et/ou télécharger le pdf/docs dois-je tout simplement de créer un point de vue similaire à celui que j'ai pour mon image
<%= image_tag @pin.image.url(:medium) % >
ou est-il plus complexe? Si oui, je vais avoir à creuser plus dans cette situation et essayer de faire une estimation sur le mien.Le plus facile serait <%= link_to "Mes documents", @code pin.document.url, target: "_blank" %>, et laissez votre navigateur pour manipuler les pdf render. Mais je ne sais pas si cela fonctionne avec tous les navigateurs et .les fichiers doc. Il fonctionne pour moi avec ubuntu, chrome et .les fichiers pdf. Une autre option serait de créer une action de contrôleur à télécharger le fichier. Quelque chose comme /pin/:id/télécharger et d'utiliser les apidock.com/rails/ActionController/Streaming/send_file.
OriginalL'auteur