2013-07-26 190 views
1

我有一個場景,在相同的形式,我有兩個上傳一個是圖像類型,而另一個是爲doc,excel和PDF等。我正在使用寶石'紙夾'的兩個。 首先我想知道如何自定義和配置回形針上傳這兩種類型, 秒我想限制兩個字段不要上傳其他類型。像圖片字段不應該接受其他內容類型,反之亦然。回形針文件上傳

+0

定製papaer剪輯見https://github.com/thoughtbot/paperclip第二: - 在上傳時,您可以檢查擴展名,例如File.extname你的擴展,所以如果它是JPG,PNG,GIF,JPEG然後它將上傳其他明智它將上傳第一個 –

+0

我有這在我的模型,但它不工作.. has_attached_file:文件 validates_attachment:document,content_type: 「application/pdf」 – Sami

+0

ArgumentError(您必須通過:content_type或:不通過驗證程序): – Sami

回答

3

您可以檢查

回形針上傳文件: - 1)在Gemfile中 包括在你的Gemfile寶石:

gem "paperclip", "~> 3.0" 

如果你還在使用Rails的2.3.x版本,你應該做到這一點,而不是:

gem "paperclip", "~> 2.7" 

2)在模型中

class User < ActiveRecord::Base 
    attr_accessible :img_avatar, :file_avatar 
    has_attached_file :img_avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png" 
    has_attached_file :file_avatar, :default_url => "/files/:style/missing.doc" 
end 

3)在您的遷移:

class AddAvatarColumnsToUsers < ActiveRecord::Migration 
    def self.up 
    add_attachment :users, :img_avatar 
    add_attachment :users, :file_avatar 
    end 

    def self.down 
    remove_attachment :users, :img_avatar 
    remove_attachment :users, :file_avatar 
    end 
end 

在你的編輯和新的觀點:

<%= form_for @user, :url => users_path, :html => { :multipart => true } do |form| %> 
    <%= form.file_field :img_avatar %> 
    <%= form.file_field :file_avatar %> 
    <% end %> 

在你的控制器:

def create 
@user = User.create(params[:user]) 
if ["jpg,"jpeg","gif", "png"].include? File.extname(params[:img_avatar]) 
    @user.img_avatar = params[:img_avatar] 
elsif ["doc","docx","pdf","xls","xlsx"].include?File.extname(params[:file_avatar]) 
    @user.file_avatar = params[:file_avatar] 
else 
    flash[:message] = "You are uploading wrong file" #render flash message 
end 

感謝

+0

首先讓我知道如何上傳文件:) – Sami

+0

好的請參閱回形針指南github.com/thoughtbot/paperclip上傳文件 –

+0

請參閱我的文章,以兩種不同的方式上傳您的案例 –

2

爲了擴大所選擇的答案(&解決您引發ArgumentError)..

,你可以把所有的內容驗證模型中的下has_attached_file,像這樣:

validates_attachment_content_type :img_avatar, :content_type => /^image\/(png|jpeg)/ 
validates_attachment_content_type :file_avatar, :content_type =>['application/pdf'] 

這將允許附件類型爲img_avatar只能是PNG和JPEG(你可以添加其他擴展名),併爲file_avatar是,在這種情況下,PDF格式:)