Rails (Mongoid) 模型中的条件默认值
Conditional default value in Rails (Mongoid) model
这看起来有点矛盾,一个 "conditional default," 但我想知道是否有一种方法可以轻松处理仅在对象不是特定对象的情况下为字段设置默认值类型。
例如,我有
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,我希望只接受零和非负数值
使用 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 }
这看起来有点矛盾,一个 "conditional default," 但我想知道是否有一种方法可以轻松处理仅在对象不是特定对象的情况下为字段设置默认值类型。
例如,我有
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,我希望只接受零和非负数值
使用 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 }