我想在我的销售模型中验证销售折扣.
创建销售的表单从我的仓库模型接收产品数据并将其保存在销售记录中:
<%= f.select(:product, Warehouse.pluck(:product).uniq, {prompt:true}, {class: 'form-control'}) %>
Warehouse模型具有为此相应产品指定的折扣.现在我想检查是否sale.product
等于warehouse.product
,然后设置此次促销的折扣限额.那可能吗?像这样的东西:
validates_length_of :discount, maximum: Warehouse.where(:product => @sales.product).pluck(:discount), message: "Discount is to high"
提前谢谢了!
首先,您应该验证numericality
数值.
不需要自定义验证.您不必使用常量或文字或其他类评估时间值!使用特效!他们会被召集!
您将一个键作为比较传递,然后将一个proc作为值传递,因此在验证期间调用它.
valudates_numericality_of :discount, less_than_or_equal_to: proc { |model| Something.query(whatever).pluck(:wow) }, message: "is too high"
注意:您可能还应该检查一下是否为正.
奖金(纯粹的乐趣,最好不要使用):几乎相同的代码与壮观的箭头
(按顺序:符号<=
,hashrocket =>
,stabby-lambda-> () {}
):
valudates_numericality_of :discount, :<= => -> (model) { Something.query(whatever).pluck(:wow) }, :message => "is too high"
请注意,1.9哈希语法不适用于像<=
(像<=: value
)那样的符号,所以你必须坚持使用这个符号,这是......另一点纯粹的乐趣.