我想允许发布没有图像或带有唯一图像的消息,我在模型中添加了以下代码
validates :image_fingerprint, :uniqueness => true
它禁止发布类似的图像,但也禁止发布多条没有图像的消息。我试图添加
:allow_blank => 真
和
:allow_nil => 真
但这会导致以下错误:
PostsController#create 中的 TypeError 无法将 nil 转换为 String
我该如何解决?
我想允许发布没有图像或带有唯一图像的消息,我在模型中添加了以下代码
validates :image_fingerprint, :uniqueness => true
它禁止发布类似的图像,但也禁止发布多条没有图像的消息。我试图添加
:allow_blank => 真
和
:allow_nil => 真
但这会导致以下错误:
PostsController#create 中的 TypeError 无法将 nil 转换为 String
我该如何解决?
您可以:unless
在验证时使用,前提是此属性不为空
validates :image_fingerprint, :uniqueness => true,
:unless => Proc.new { |a| a.image_fingerprint.blank? }
参考:
您可以将 :if 和 :unless 选项与一个符号相关联,该符号对应于在验证发生之前将被调用的方法的名称。这是最常用的选项。
最后,可以将 :if 和 :unless 与将被调用的 Proc 对象相关联。使用 Proc 对象使您能够编写内联条件而不是单独的方法。此选项最适合单行。
http://guides.rubyonrails.org/active_record_validations_callbacks.html#conditional-validation