我在rails应用程序中使用paperclip,并在我的模型中进行以下三种验证
validates_attachment_presence :photo
validates_attachment_size :photo, :less_than=>1.megabyte
validates_attachment_content_type :photo, :content_type=>['image/jpeg', 'image/png', 'image/gif']
Run Code Online (Sandbox Code Playgroud)
如果用户忘记添加附件,则所有三个验证都会失败,因此会向用户显示以下三个错误:
# Photo file name must be set.
# Photo file size file size must be between 0 and 1048576 bytes.
# Photo content type is not included in the list
Run Code Online (Sandbox Code Playgroud)
我认为最好只显示此实例中的第一个错误,因为其他两个错误纯粹是后果...我希望用户只看到后两个错误,如果已添加附件但不符合验证标准.
我确定没有预先出现的验证可以做这种事情,并且通过阅读vendor/plugins/paperclip/lib/paperclip.rb中的代码,我看到validates_attachment_size方法支持:unless参数如下所示:
def validates_attachment_presence name, options = {}
message = options[:message] || "must be set."
validates_presence_of :"#{name}_file_name",
:message => message,
:if => options[:if],
:unless => options[:unless]
end
Run Code Online (Sandbox Code Playgroud)
所以,我在想我可以做以下事情:
validates_attachment_size :photo, :less_than=>1.megabyte, :unless=> :photo.blank
Run Code Online (Sandbox Code Playgroud)
但这打破了应用程序.有没有经验做过这种事情?对回形针源代码有很好的贡献.
编辑:
我试过用这个:
validates_attachment_size :photo, …Run Code Online (Sandbox Code Playgroud) 我是Paperclip的新手,这一切看起来都很快.我试图让用户只上传PNG或JPG,虽然我上传了一个JPG并且我的content_type验证了JPG但它仍然无效.
我已经尝试删除PNG content_type,但无济于事.
我尝试过使用过has_attached_file,但似乎忽略了:content_type和stuff.因为如果我:content_type => "image/png"只上传一个JPG ; 它没有给出错误.
有什么建议?
validates_attachment :avatar, :styles => {
:medium => "300x300",
:thumb => "100x100"
}, :content_type => {
:content_type => "image/jpg",
:content_type => "image/png"
},
:size => { :in => 0..1.megabytes }
Run Code Online (Sandbox Code Playgroud)
哦,当我在它的时候; 我想让我的拇指和中等到固定的宽度.所以没有缩放像100x80,但只有100x100.我怎样才能做到这一点?