У нас есть несколько моделей, которым требуются дочерние объекты
Каждый ребенок должен иметь уникальный последовательный идентификатор в качестве первичного ключа и уникальный последовательный идентификатор на основе отношения, как показано ниже:
Object id: 1
Children id: 1, internal_id: 1
Children id: 2, internal_id: 2
Object id: 2
Children id: 3, internal_id: 1
Children id: 6, internal_id: 2
Children id: 7, internal_id: 3
Object id: 3
Children id: 4, internal_id: 1
Children id: 5, internal_id: 2
Children id: 8, internal_id: 3
Children id: 9, internal_id: 4
В настоящее время я использую фильтр before_save
для закрепления internal_id
, но я чувствую, что это плохая практика, и ее можно улучшить с помощью некоторой магии sql
def define_internal_id
self.internal_id = 1 + Children.unscoped.where(parent_id: self.parent_id).count
end
before_save :define_internal_id
Есть ли лучший способ решить эту проблему?