1

シナリオがあります。同じ形式で、2 つのアップロードがあります。1 つは画像タイプで、もう 1 つは doc、excel、PDF などです。両方に gem 'paper-clip' を使用しています。最初に、両方のタイプをアップロードするようにペーパー クリップをカスタマイズおよび構成する方法を知りたいです。次に、両方のフィールドを制限して、他のタイプをアップロードしないようにしたいと考えています。同様の画像フィールドは、他のコンテンツ タイプを受け入れるべきではありません。逆も同様です。

4

2 に答える 2

3

確認してもいい

ペーパークリップ ファイルのアップロード :-- 1) Gemfile に Gemfile に gem を含めます。

 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 

終わり

ありがとう

于 2013-07-26T05:15:31.930 に答える
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 のみにすることができます:)

于 2014-04-10T10:09:22.880 に答える