2015-10-19 71 views
0

我有以下模型。我試圖通過包含所有分配給標題列表的用戶。在'has_many through'關係中使用包含

返回的查詢不包括用戶只有標題列表。我不明白什麼?

查詢:

TitleList.all(:users).where(:id => 43) 

型號:

class Relationship::TitleListUserRelationship < ActiveRecord::Base 
    self.table_name = 'tbl_title_list_to_users' 
    belongs_to :title_list, :foreign_key => 'title_list_id', :class_name => 'TitleList' 
    belongs_to :user, :foreign_key => 'user_id', :class_name => 'User' 
end 

class TitleList < ActiveRecord::Base 
    self.table_name = 'tbl_title_lists' 
    has_many :user_relationships, class_name: 'Relationship::TitleListUserRelationship' 
    has_many :users, class_name: 'User', through: :user_relationships, source: :user 
end 

class User < ActiveRecord::Base 
    has_many :title_list_relationships, class_name: 'Relationship::TitleListUserRelationship' 
    has_many :title_lists, through: :title_list_relationships 
end 
+0

該語法正確嗎? 'TitleList.all(:legacy_titles).where(:id => 43)'。可能是一個錯字,我認爲它會拋出一個錯誤 - 什麼是':legacy_titles'? – Swards

+0

對不起,應該是:用戶。編輯。 – Brogrammer

+1

你是否試圖獲得user_id爲43的所有title_lists?或者一個title_list,其ID是43,並且它的所有用戶? – Swards

回答

0

我不熟悉你所使用的語法。如果你正在尋找的是一切都與TitleList id爲43的用戶,你可能會寫類似:

User.joins(user_relationships: :title_list).where(title_lists: {id: 43}) 

或者乾脆:

TitleList.find(43).users 
0
TitleList.includes(:users).find(43) 

where會帶來返回一個你最後可以用.first處理的數組。

TitleList.where(:id => 43).includes(:users).first 

或類似的你有什麼:

TitleList.includes(:users).where(:id => 43).first 

我沒想到all可以採取PARAMS。我嘗試時發現錯誤。

ArgumentError: wrong number of arguments (1 for 0)