Rails模型validation条件allow_nil?

所以我想知道我们是否可以在rails模型上使用条件allow_nil选项进行validation。

我想要做的是能够allow_nil取决于一些逻辑(一些其他属性)

所以我有一个产品型号可以保存为草稿。 当被保存为草案时,价格可以是零,但是当不是草稿时,保存价格应该是数字。 我该怎么做到这一点。 以下似乎不起作用。 它适用于草案,但即使状态不是草案也允许为零。

class Product<ActiveRecord::Base attr_accessible :status, price validates_numericality_of :price, allow_nil: :draft? def draft? self.status == "draft" end end 

看看rails docs我看起来没有选项将方法传递给allow_nil?

一种可能的解决方案是对两种情况进行单独的validation

  with_options :unless => :draft? do |normal| normal.validates_numericality_of :price end with_options :if => :draft? do |draft| draft.validates_numericality_of :price, allow_nil: true end 

任何其他方法来使这个工作?

谢谢

您可以使用ifunless执行以下操作

 class Product 

有了上述内容,您将设置2个validation,一个适用于draft? == true draft? == true ,哪个会允许nils,哪个会选择draft? == false draft? == false ,不允许nils