Я работаю над проектом, в котором у меня есть модель под названием transaction
. У transaction
может быть много дочерних транзакций, использующих ключ parent_transaction_id
. Отношения родитель-потомок могут быть только на один слой в глубину, поэтому у ребенка не может быть собственного потомка.
transaction
также имеет атрибут с именем reference_number
. Я бы хотел, чтобы этот атрибут был уникальным, за исключением отношений родитель-потомок. Таким образом, родительская и дочерняя транзакции могут иметь одинаковые reference_number
, а две несвязанные транзакции — нет. В настоящее время у меня есть:
validate :reference_number, uniqueness: true, allow_blank: true
Первоначально я думал, что при проверке будет условие unless: -> { is_parent_child }
, но, похоже, невозможно сделать то, что я хочу, с помощью этого метода.
Любая помощь в поиске способа сделать это будет принята с благодарностью.
def reference; return parent_transaction&.reference if parent_transaction&.reference; self[:reference];end
. Он вернет ссылку на родителя, а если родителя нет, он вернет ссылку на текущую транзакцию. - person SteveTurczyn   schedule 07.02.2018validates :reference_number, uniqueness: true, if: 'parent_transaction_id.blank?'
и получитьbefore_validation :reset_reference_number
иdef reset_reference_number; self.reference_number = nil if parent_transaction_id.present?; end
- person SteveTurczyn   schedule 07.02.2018