Jak wspomniano tutaj:Dlaczego NIE chciałbym używać odwrotności wszędzie?
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
inverse_of wydaje się powiedzieć Rails buforowania w pamięci stowarzyszeń i zminimalizować zapytań do bazy danych. Ich przykładem jest:
class Dungeon < ActiveRecord::Base
has_many :traps, :inverse_of => :dungeon
has_one :evil_wizard, :inverse_of => :dungeon
end
class Trap < ActiveRecord::Base
belongs_to :dungeon, :inverse_of => :traps
end
które natychmiast postępować z:
for `belongs_to` associations `has_many` inverse associations are ignored.
Więc mam kilka pytań.
- Czy powiązania odwrotne są ignorowane pod numerem
has_many
dlabelongs_to
? Jeśli tak, to w jaki sposób ich przykład ma sens? Czy nie powinien po prostu nic nie robić? O ile mogę powiedzieć (zakładając, że nic nie robi) Wszystko to pozwala zrobić, to coś jak:
dungeon.traps.first.dungeon
z ostatecznym wezwaniem do
.dungeon
NIE generowania całą nową kwerendę, ale tylko sięgając po w skojarzeniu z pamięcią. Zakładając, że to jest poprawne, dlaczego miałbym NIE chcieć takiego zachowania? Dlaczego nie miałbym po prostu kłaśćinverse_of:
na każdym skojarzeniu?
więc to znaczy, że jeśli miałbym powiedzieć t.dungeon.level = 10 (zamiast d.level = 10), że d.level nie aktualizowane nawet jeśli ustawiłem inverse_of, ponieważ zostało zignorowane? i ogólnie, aktualizacja członka kolekcji nie zostanie zsynchronizowana z innymi instancjami tego członka? ale nadal nie wydaje się, aby problem stanowił odwrót wszędzie, przynajmniej w nadziei, że w końcu go wesprą, prawda? – bdwain
@bdwain jest to dla mnie bardzo interesujące, ponieważ zawsze myślałem, że Railsy automatycznie wywnioskowały ten związek odwrotny (jeśli pasują do siebie). Po pojawieniu się tego ostatnio (podczas sprawdzania poprawności w modelu, który akceptuje_nested_attributes_for_powiązanego modelu), muszę zgodzić się z twoim wnioskiem: hojnie używaj 'inverse_of'. Nie mogę sobie wyobrazić żadnego powodu, by tego nie robić. – steve