如何将proc传递给validates中的条件

时间:2014-07-30 21:13:22

标签: ruby-on-rails validation proc

如何为条形码编写验证,使is_deleted为假且同一链的所有用户都是唯一的?

validates :barcode, uniqueness: { conditions: -> { |record| where(is_deleted: false, chain_id: record.chain_id) } }, if: proc { |u| u.barcode.present? }

这里有什么问题?

感谢。

UPD。可以有两个具有相同条形码和相同chain_id的用户,如果其中一个或两者都有:is_deleted => true

2 个答案:

答案 0 :(得分:1)

validates :barcode, uniqueness: { scope: :chain_id, conditions: ->{ where(is_deleted: false) } }, if: proc { |u| u.barcode.present? && u.active? }

我想出了一个解决方案。 谢谢,对不起,它已经很晚了,头部没有按预期工作:)

答案 1 :(得分:0)

Rails验证包含ifunless参数,可让您添加条件,您可以使用它来正确检查条形码的存在,但您也可以将其扩展为is_deleted。 关于连锁ID,我知道您对范围界定感兴趣。

在你的情况下

validates :barcode, uniqueness: { scope: [:chain_id] }, if: proc { |u| u.barcode.present? && w.is_deleted.false? }