1

我想允许发布没有图像或带有唯一图像的消息,我在模型中添加了以下代码

validates :image_fingerprint, :uniqueness => true

它禁止发布类似的图像,但也禁止发布多条没有图像的消息。我试图添加

:allow_blank => 真

:allow_nil => 真

但这会导致以下错误:

PostsController#create 中的 TypeError 无法将 nil 转换为 String

我该如何解决?

4

1 回答 1

2

您可以: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

于 2013-05-08T12:30:51.037 回答