Walidacja acts_as_tree

Witam,

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)

Z góry dzięki za pomoc i pozdrawiam,

Piotr Misiurek
Marzenia

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?

http://www.rubyonrails.pl/forum/viewtopic.php?pid=2180#p2180

Jeżeli chodzi o potomków, to wystarczy lekko tego ifa zmodyfikować

:slight_smile:

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