ruby-on-rails - Rails 模型验证条件 allow_nil?

标签 ruby-on-rails ruby-on-rails-3 validation activerecord

所以我想知道我们是否可以有条件 allow_nil 选项来验证 Rails 模型。

我想要做的是能够根据一些逻辑(一些其他属性)allow_nil

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

class Product<ActiveRecord::Base
   attr_accessible :status, price
   validates_numericality_of :price, allow_nil: :draft?

   def draft?
     self.status == "draft"
   end

end

查看 rails 文档,我似乎没有将方法传递给 allow_nil 的选项?

一种可能的解决方案是对两种情况分别进行验证

 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<ActiveRecord::Base
   attr_accessible :status, price
   validates_numericality_of :price, allow_nil: true, if: :draft?
   validates_numericality_of :price, allow_nil: false, unless: :draft?

   def draft?
     self.status == "draft"
   end

end

通过以上内容,您将设置 2 个验证,一个适用于 draft? == true,这将允许 nils,以及 draft? == false 不允许使用 nils

关于ruby-on-rails - Rails 模型验证条件 allow_nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11922154/

相关文章:

ruby-on-rails - Omniauth/设计/Facebook : Auth route is not recognized

使用 Parse() 对任何具有 Parse 实现的 T 进行 C# 数据验证

javascript - rails 4 : change boolean value with ajax remotely

java - 在 Rails 应用程序中实现 Java 门面/服务概念的最佳方式

forms - 如何更改 rails 3 中表单的 text_area 默认大小?

ruby-on-rails-3 - Rails3 自定义 Controller 方法未路由 : works in Rails2

ruby-on-rails-3 - Heroku、H12 和直通上传超时

Scala - 定义范围内数字的类型

JAVASCRIPT 验证表单中的日期

ruby-on-rails - Gemfile语法错误