2014-07-12 9 views
14

Vorrei per consentire agli utenti di caricare Word Documenti e PDF file alla mia applicazione Rails. La mia app è simile a un'app Pinterest, gli utenti possono creare Pin dove allegare un'immagine seguita da una descrizione (usata Paperclip per allegare l'immagine al pin ).Come caricare immagini, documenti Word e/o file PDF tramite Paperclip rotaie 4

Ecco il mio Pins modello:

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 

mio Pins regolatore:

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 

mi chiedo se ho solo bisogno di creare un altro metodo has_attached_file per le documenti Word e PDF file file all'interno del mio Pin modello e quindi creare una vista per gli utenti per caricare il file.

risposta

28

Dipende ...

Se si desidera allegare un'immagine E un documento è necessario creare un altro attributo graffetta per il documento. Del modello:

has_attached_file :image, :styles => { :medium => "300x300>", :thumb => "100x100>" } 
validates_attachment :image, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png", "image/gif"] } 

has_attached_file :document 
validates_attachment :document, :content_type => { :content_type => %w(application/pdf application/msword application/vnd.openxmlformats-officedocument.wordprocessingml.document) } 

Se si desidera allegare un'immagine OR un documento È possibile effettuare le seguenti operazioni:

has_attached_file :document 
validates_attachment :document, :content_type => {:content_type => %w(image/jpeg image/jpg image/png application/pdf application/msword application/vnd.openxmlformats-officedocument.wordprocessingml.document)} 

Se si sceglie la prima opzione avrete bisogno di due ingressi di file sul vostro vista, con il secondo solo uno. Non è giusto o sbagliato in questo. Dipende da cosa vuoi fare.

+0

Sto usando la prima opzione (carica pdf/documenti e immagine). Ho creato un nuovo input per ': document' come segue:'

<%= f.label :document %>
<%= f.file_field :document, class: "form-control" %>
'. Ho provato e mi dà un errore 'metodo non definito document_content_type''. Qualcosa sta succedendo con il mio controller ** Pins **: 'def crea @pin = current_user.pins.build (pin_params) if @ pin.save redirect_to @ pin, avviso: 'Pin è stato creato con successo.' else azione di rendering: 'nuovo' fine fine'. – Cyzanfar

+1

hai eseguito 'rails generate paperclip pin document' per creare la migrazione? Questo generatore creerà document_file_name, document_file_size, document_content_type e document_updated_at attributi sul tuo modello Pin – Leantraxxx

+0

Ricordati di farlo: Ran 'rails genera migrazione add_file_to_pin' then 'rake db: migrate'. Funziona bene ora. Devo pensare ** MVC **! – Cyzanfar

Problemi correlati