这似乎是矛盾的,有条件的违约,"但我想知道是否有一种方法,只有在对象不属于某种类型的情况下才能轻松处理为字段设置默认值。
例如,我有
field :object_type, type: String
field :price, type: Float, default: 0
validates :price, presence: true, numericality: { greater_than_or_equal_to: 0 }
如果我可以添加unless: ->{ object_type == "a"}
这样的条件并且内联处理这个问题,那就太好了。 rails会允许或者我现在必须使用before_create
回调设置此条件默认值吗?
我想要发生的伪代码:
如果object_type是" a"之外的任何其他类型。那么我想将价格的默认值设置为零。
如果对象类型为a,我只希望零和非负数值可以接受
答案 0 :(得分:6)
使用proc
是这里的方式
field :object_type, type: String
field :price, type: Float, default: proc { object_type== "a" ? nil : 0}
validates :price, presence: true, numericality: { greater_than_or_equal_to: 0 }