1
給定用戶和書籍模型,我創建了一個包含附加屬性的聯接模型,包含了PerspectiveBook。下面是我想到的內容:使查詢結果中可用的ActiveRecord聯接模型屬性
create_table "users"
t.string "username"
end
create_table "books"
t.string "title"
t.integer "user_id"
t.date "authored_date"
end
create_table "books_viewings"
t.integer "book_id"
t.integer "user_id"
t.boolean "finished"
t.date "last_viewed_date"
end
class User
belongs_to :book_viewing
has_many :authored_books,
:class_name => "Book",
:source => :book
has_many :book_viewings
has_many :viewed_books :through => :book_viewings
:order => "book_viewings.last_viewed_date DESC"
has_many :finished_books :through => :book_viewings
:conditions => "book_viewings.finished = TRUE",
:order => "book_viewings.last_viewed_date DESC"
end
class Book
belongs_to :user
has_one :author, :class_name => "User"
end
class BookViewing
belongs_to :book
belongs_to :user
end
我認爲這適用於我需要創建的大多數查詢。不過,我希望user.viewed_books
返回的每個Book對象也包含finished
屬性。此外,我還會添加其他查詢,例如Book.best_sellers
,我也希望將其範圍擴展到給定的用戶,以便他們還包含完成的屬性。
從我對ActiveRecord的有限接觸中,似乎可能有一種優雅的方式來管理這個並生成高效的查詢,但我還沒有找到一個可以說明這種情況的例子。
編輯:澄清,我正在尋找自己不會僅限於已完成圖書的其他查詢,但我需要有finished
屬性附加到每一本書,如果它存在,對於給定的書和book_viewings中的作用域用戶。
謝謝布拉德利!我認爲這可能正是我所需要的。我會在今天晚些時候進行驗證。 – 2012-02-15 16:27:15
這種方法令人傷心地生成內部聯接,因此將結果限制爲具有關聯book_viewing的書籍。我澄清了最初的問題,以包括我需要大部分查詢都需要左連接的事實。 – 2012-02-16 01:02:21