我想让用户将Word文档和PDF文件上传到我的rails应用程序.我的应用程序类似于Pinterest应用程序,用户可以在其附加图片的同时创建引脚,然后再进行说明(使用“纸张剪贴板将图像附加到引脚”).
这是我的引脚模型:
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
我的引脚控制器:
class PinsController < ApplicationController before_action :set_pin,only: [:show,:edit,:update,:destroy] before_action :correct_user,only: [:edit,: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
我想知道我是否需要为我的Pin模型中的Word文档和PDF文件创建另一个has_attached_file方法,然后为用户创建一个用于上传文件的视图.
解决方法
这取决于…
如果要附加图像和文档,则需要为文档创建另一个纸张剪贴画属性.您的型号:
has_attached_file :image,:thumb => "100x100>" } validates_attachment :image,"image/gif"] } has_attached_file :document validates_attachment :document,:content_type => { :content_type => %w(application/pdf application/msword application/vnd.openxmlformats-officedocument.wordprocessingml.document) }
如果要附加图像或文档,您可以执行以下操作:
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)}
如果您选择第一个选项,则您的视图中将需要两个文件输入,仅第二个选项.这不对还是错.这取决于你想做什么