Rails / ActiveRecord Sub collection - PullRequest
       21

Rails / ActiveRecord Sub collection

0 голосов
/ 25 мая 2010

У меня есть три модели: Магазин, Автор, Книги

В магазине много авторов, у которых много книг.

Какой самый чистый способ получить коллекцию всех книг в магазине?

Это работает:

@store.authors.collect{|a| a.books}.flatten 

Что-то в Active Record мне не хватает, что делает это чище?

Джейк

Ответы [ 2 ]

1 голос
/ 25 мая 2010

Это может сработать ...

class Store < ActiveRecord::Base
   has_many :authors
   # I used :uniq because a book can have more than one author, and without
   #   the :uniq you'd have duplicated books when using @store.books
   has_many :books, :through => :authors, :uniq => true
end

class Author < ActiveRecord::Base
   has_many :books
end

class Book < ActiveRecord::Base
   belongs_to :author
end

С этим кодом вы можете использовать @store.books ...

0 голосов
/ 25 мая 2010

То, что вы хотите, это через has_many.Это работает так:

# in store.rb
has_many :authors
has_many :books, :through => :authors

# in author.rb
belongs_to :store
has_many :books

# in book.rb
belongs_to :author

Теперь вы можете сказать @store.books, и оно должно просто работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...