has_many :through

Witam!

Mam problem z użyciem parametru :through metody has_many - może drobny przykład:

[code]class Person < AR
has_one :shelf
has_many :books, :through => :shelf
end

class Shelf < AR
belongs_to :person
has_many :books
end

class Book < AR
belongs_to :shelf
end[/code]
Teraz efekty:

p = Person.find :first p.shelf # => wszystko działa OK p.shelf.books == p.books # => true book = p.books.first book.shelf # => wszystko działa OK book.person # => ERROR :/
Próbowałem dopisać do klasy Book “belongs_to :person”, ale wtedy zamiast errora dostaje nil. Natomiast belongs_to nie przyjmuje opcji :through

Mógłbym dopisać

class Book def person shelf.person end end
ale musi być inne rozwiązanie, które pozwoliłoby pobierać obiekt Person przy Plant.find :all, :include => :person

Jakieś pomysły?

Twoj kod na koncu jest OK. Nie ma mozliwosci dostania sie do osoby bezposrednio (brak person_id w books). Z tego co widze to ksiazka nie ma wlasciciela a jedynie polka i ksiazka automatycznie staje sie jego wlasnoscia gdy sie na niej znajdzie.

Co do find to nic nie stoi na przeszkodzie

Book.find(:all, :include => [:shelf => :person])

belongs_to :persons, :through => :shelf

Jak widac z twojego kodu, ksiazka MUSI miec wiele Persons.