我有一个rails应用程序,有三个模型,分别是作者,书籍和作者。一本书有许多作者通过称为作者身份的联合模型,作者通过称为作者身份的联合模型有很多书籍,例如
class Author < ActiveRecord::Base
attr_accessible :name
has_many :authorships
has_many :books, :through => :authorships
end
class Book < ActiveRecord::Base
attr_accessible :name, :author_ids
has_many :authorships
has_many :authors, :through => :authorships
end
class Authorship < ActiveRecord::Base
attr_accessible :book_id, :author_id
belongs_to :book
belongs_to :author
end
现在我的问题是,我怎样才能找到与同类作者相同的书籍
例如,,<% book = Book.first %>
<% book.similar_authors.each do |book| %>
#......
<% end %>
我将使用哪种查询来定义similar_authors
答案 0 :(得分:1)
你的关系似乎已经定义了它。试试这个:
<% book.authors.each do |author| %>
<% author.books.each do |book| %>
#......
<% end %>
<% end %>
或者,如果你只想拥有一个迭代器,而且没有欺骗,也许就像这样(这和上面一样):
<% book.authors.map { |author| author.books }.flatten.uniq.sort.each do |book| %>
#......
<% end %>
并且,绕过整圈,也许在你的模型中(这与上面相同):
def books_from_similar_authors
authors.map { |author| author.books }.flatten.uniq.sort
end
答案 1 :(得分:0)
你可以这样做,
例如
假设您的author name
为"xyz"
,
在您的模型中
def similar_authors(name)
where("author_name = ?", name )
end
并在您的控制器中
book.similar_authors('xyz') # you will get all books that have author_name is 'xyz'
如果您想进行优化,那么您也可以为该
制作scope