【发布时间】:2011-07-06 21:30:04
【问题描述】:
我正在尝试获取列表,我将以书籍为例。
class Book < ActiveRecord::Base
belongs_to :type
has_and_belongs_to_many :genres
end
class Genre < ActiveRecord::Base
has_and_belongs_to_many :books
end
所以在这个例子中,我想显示所有流派的列表,但它的第一列应该是类型。所以,如果说一个流派是“太空”,那么类型可能是“非小说”和“小说”,它会显示:
Type Genre
Fiction Space
Non-fiction Space
Genre 表只有“id”、“name”和“description”,连接表genres_books 有“genre_id”和“book_id”,Book 表有“type_id”和“id”。但是,我无法使其正常工作。
我知道我需要的 sql 代码是:
SELECT distinct genres.name, books.type_id FROM `genres` INNER JOIN genres_books ON genres.id = genres_books.genre_id INNER JOIN books ON genres_books.book_id = books.id order by genres.name
我发现我可以做到
@genre = Genre.all
@genre.each do |genre|
@type = genre.book.find(:all, :select => 'type_id', :group => 'type_id')
@type.each do |type|
这可以让我看到每种类型的类型并将它们打印出来,但我不能一次真正地使用它们。我认为理想的情况是,如果在 Genre.all 声明中我可以以某种方式将它们归为一组,这样我就可以将流派/类型组合保持在一起,并在未来与它们一起工作。我试图按照以下方式做一些事情:
@genres = Genre.find(:all, :include => :books, :select => 'DISTINCT genres.name, genres.description, books.product_id', :conditions => [Genre.book_id = :books.id, Book.genres.id = :genres.id] )
但在这一点上,我在兜圈子,没有到达任何地方。我需要使用 has_many :through 吗?
【问题讨论】:
标签: ruby-on-rails join has-and-belongs-to-many