如何为条形码编写验证,使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
答案 0 :(得分:1)
validates :barcode, uniqueness: { scope: :chain_id, conditions: ->{ where(is_deleted: false) } }, if: proc { |u| u.barcode.present? && u.active? }
我想出了一个解决方案。 谢谢,对不起,它已经很晚了,头部没有按预期工作:)
答案 1 :(得分:0)
Rails验证包含if
和unless
参数,可让您添加条件,您可以使用它来正确检查条形码的存在,但您也可以将其扩展为is_deleted
。
关于连锁ID,我知道您对范围界定感兴趣。
在你的情况下
validates :barcode, uniqueness: { scope: [:chain_id] }, if: proc { |u| u.barcode.present? && w.is_deleted.false? }