유효성 검사에서 조건에 proc을 전달하는 방법
-
21-12-2019 - |
문제
모든 사용자에 대해 고유한 바코드에 대한 유효성 검사를 어떻게 작성합니까? 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
해결책
validates :barcode, uniqueness: { scope: :chain_id, conditions: ->{ where(is_deleted: false) } }, if: proc { |u| u.barcode.present? && u.active? }
.
나는 해결책을 생각해 냈습니다. 고마워요, 죄송합니다, 늦은 늦은 머리가 예상대로 작동하지 않습니다.)
다른 팁
레일 검증에는 if
그리고 unless
조건을 추가할 수 있는 매개변수를 사용하여 바코드 존재 여부를 제대로 확인했지만 is_deleted
또한.체인 ID와 관련하여 귀하가 범위 지정에 관심이 있다는 것을 이해합니다.
귀하의 경우에는
validates :barcode, uniqueness: { scope: [:chain_id] }, if: proc { |u| u.barcode.present? && w.is_deleted.false? }
제휴하지 않습니다 StackOverflow