相关疑难解决方法(0)

更智能的回形针验证

我在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)

validation model ruby-on-rails paperclip

19
推荐指数
2
解决办法
2万
查看次数

Paperclip的content_type根据应用程序无效,但不是

我是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.我怎样才能做到这一点?

ruby-on-rails paperclip ruby-on-rails-4

4
推荐指数
1
解决办法
4485
查看次数