我有一個包含用戶,圖書館和書籍的應用程序。查詢間接關係
用戶有許多庫。圖書館有許多用戶和書籍。但用戶和書籍沒有直接關係。用戶只能從圖書館借書。
我一直在試圖獲取屬於用戶所屬圖書館的書籍集合。換句話說,我想獲得一個給定用戶所屬的圖書館中的所有書籍。
要清楚,我不想通過用戶和書籍之間現在存在的借用協會,因爲我需要該庫中的所有書籍,而不僅僅是當前借用的書籍。
我試圖拿出這個查詢小時使用SQL和Squeel,沒有運氣......先謝謝你的幫助。
我有一個包含用戶,圖書館和書籍的應用程序。查詢間接關係
用戶有許多庫。圖書館有許多用戶和書籍。但用戶和書籍沒有直接關係。用戶只能從圖書館借書。
我一直在試圖獲取屬於用戶所屬圖書館的書籍集合。換句話說,我想獲得一個給定用戶所屬的圖書館中的所有書籍。
要清楚,我不想通過用戶和書籍之間現在存在的借用協會,因爲我需要該庫中的所有書籍,而不僅僅是當前借用的書籍。
我試圖拿出這個查詢小時使用SQL和Squeel,沒有運氣......先謝謝你的幫助。
你可以做這樣的事情......
Book.where(:library_id => user.library_ids)
或者你也可以做到這一點。鑑於這種模式設置...
class Book < ActiveRecord::Base
belongs_to :library
class Library < ActiveRecord::Base
has_many :books
has_many :memberships
has_many :users, :through => :memberships
class User < ActiveRecord::Base
has_many :memberships
has_many :libraries, :through => :memberships
has_many :books, :through => :libraries
有了這個,你可以要求@user.books
,這在Rails會生成SQL這樣的:
# 1 is @user.id
SELECT "books".* FROM "books" INNER JOIN "libraries" ON "books"."library_id" = "libraries"."id" INNER JOIN "memberships" ON "libraries"."id" = "memberships"."library_id" WHERE "memberships"."user_id" = 1
Table_User
user_id user_name library_id membership_id
Table_Library
library_id user_id book_id membership_id
Table_Books
books_id book_name library_id
Table_Membership
membership_id user_id library_id
select book_name from Table_Books
inner join Table_Library on Table_Books.library_id=Table_Library.library_id
inner join Table_User on Table_User.library_id=Table_Library.library_id
where Table_User.library_id = Table_Membership.library_id
and Table_User.user_id =Table_Membership.user_id