作者has_many图书
图书has_many内容
如果我想找到一些重复的部分,例如:"兴趣" ,在所有书籍和所有作者。我也希望看到他们的book.title和author.name。
content_section = Content.where(:section => "interest").select("book_id, section ";
books = Books.where(:id => content_section.map(&:book_id)).select("author_id, title")
authors = Author.where(:id => books.map(&:author_id)).select("name")
问题1:有没有更好的方法来实现这一目标? (在绩效问题或其他一些方面)
问题2:有没有办法让content_section,books和authors合并到一个表中? (在ruby端或MySQL端。)
select * from authors, books, contents
where authors.id = books.author_id and books.id = content.book_id and content.section = "interest"
任何评论都表示赞赏。感谢。
**更新**
引用后:enter link description here和enter link description here
我尝试添加模型:
班级作者
has_many:content,:through =>书
端
然后我在控制台中尝试了这个:
author.joins(:content).where(:section =>" interest")。select(" name,title,section :);
我得到一个SQL:
从作者内部联合书籍中选择名称,标题,部分....内部联接内容.......
答案 0 :(得分:1)
这可能会这样做:
class Author
has_many :books
has_many :contents, :through => :books
scope :by_section, lambda { |section| joins(:contents).where('contents.section' => section) }
end
然后你可以打电话:
authors = Author.by_section("interest")
另外,你想知道content_sections.map(&:book_id)
。这是content_sections.map { |content_section| section.book_id }
的简写,导致一系列图书ID。