2011-08-15 7 views
0

私はRuby on Rails 3.0.9とPaperclip 2.3を使用しています。 Paperclipの宝石は2種類のバリデーションメソッド(validates_attachment_presencevalidates_attachment_content_type)しか提供していないので、カスタムバリデーションメソッドを実装しようとしています。私のモデルファイルでカスタム検証方法を改善して実行するにはどうすればよいですか?

私が持っているだけ次の検証方法

私はこのように私のコントローラから呼び出す
def validates_avatar(attribute_name, file) 
    if file.nil? # file value is nil if no file is uploaded 
    self.errors.add("#{attribute_name}", "You must select a file") 
    else 
    self.errors.add("#{attribute_name}", "Avatar is an invalid image format") unless MIME_TYPES.include?(file.content_type) 
    self.errors.add("#{attribute_name}", "Avatar is too big" if ((file.size > AVATAR_FILE_MAX_SIZE.to_i) || (file.size == nil)) 
    end 

    return self.errors.empty? 
end 

if @user.validates_avatar(:avatar, params[:user][:avatar]) 
    ... 
end 

は、私は上記の検証をしたいと思いますRuby on Railsのバリデーションメソッド(例:as-like validates :title, :presence => trueのように)と同じ方法で\を実行するようにします。

私はどのようにしてアバターの検証を処理するために上記のコードを改善することができますか?

答えて

3

これはすでにPaperclipに含まれていますが、それはまったく同じ仕事をしています。なぜそれを繰り返したいのですか?

class Avatar < ActiveRecord::Base 
    has_attached_file :file 
    validates_attachment_presence :file 
    validates_attachment_size :file, :less_than => 5.megabytes 
    validates_attachment_content_type :file, :content_type => ['image/jpeg', 'image/png'] 
end 

コントローラでは検証されません。モデルジョブです。ただ、

@user = User.new(params[:user]) 
@user.save 

@user.avatarが検証

を渡さない場合には @userは保存されません
1

実際に検証をモデルに移動する必要があります。ここに例があります:

validate :avatar_should_be_valid 

def :avatar_should_be_valid 
errors.add(:base, "avatar is invalid!") if... 
end 
関連する問題