私はプロフィールをモデル化しました
class Profile < Abstract
has_attached_file :avatar,
...
validates_attachment_size :avatar, :less_than => 2.megabytes
validates_attachment_content_type :avatar, :content_type => ['image/jpeg', 'image/png', ...]
# Many other validations
end
2 つの異なるフォームがあります。1 つはアバター用で、もう 1 つは他のすべてのフィールド用です。ユーザーは、2 番目のフォームに入力せずにアバターを保存できる必要があります。他のすべての検証をスキップして、クリップの添付ファイルのみを検証することは可能ですか? この答えに続いて、私はこのようにしようとしました:
class Abstract < ActiveRecord::Base
def self.valid_attribute?(attr, value)
mock = self.new(attr => value)
unless mock.valid?
return !mock.errors.has_key?(attr)
end
true
end
end
そしてコントローラーで
def update_avatar
if params[:profile] && params[:profile][:avatar].present? && Profile.valid_attribute?(:avatar, params[:profile][:avatar])
@profile.avatar = params[:profile][:avatar]
@profile.save(:validate => false)
...
else
flash.now[:error] = t :image_save_failure_message
render 'edit_avatar'
end
end
しかし、ペーパークリップには機能しませんでした。Profile.valid_attribute?(:avatar, params[:profile][:avatar])
常に true を返します。