W jaki sposób przeprowadzić walidację przy strukturze acs_as_tree, tak żeby parent_id nie mogło przyjmować wartości id rekordu ani id żadnego rekordu, który jest potomkiem danego (zarówno bezpośrednio, jak i pośrednio przez inne rekordy)
Czyżby nie było głowy, która by to rozsupłała? Ja spróbowałem ostatnio tak:
validates_each :parent_id do |record, attr, value|
record.errors.add attr, 'nie może wskazywać na samego siebie ani na żadnego ze swoich potomków' ->
->if value == self.id or Part.find(value).ancestors.include?(self.id)
end
Nie funkcjonuje, nie poprawne dane przechodzą walidację. Jak to ugryźć z innej strony?
Okej, dzięki za pomoc, to jest właśnie to, czego mi potrzeba.
Ta walidacje będzie więc wyglądać tak, jakby ktoś w przyszłości potrzebował:
def validate
errors.add(:parent_id, "nie może być własnym rodzicem" ) if id == parent_id
errors.add(:parent_id, "nie może mieć za rodzica własnego potomka" ) if Part.find(parent).ancestors.include?(Part.find(id)) if id
end