我想獲得一個列表,我將以書籍爲例。Rails HABTM加入另一個條件
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
文體表只有「ID」,「姓名」,和「描述」中,連接表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:通過嗎?