在`has_many through`关系中使用include

时间:2015-10-19 18:08:23

标签: ruby-on-rails ruby ruby-on-rails-4

我有以下型号。我正在尝试通过包含将所有用户分配到标题列表。

返回的查询不包括仅用户的标题列表。我不懂什么?

查询:

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

2 个答案:

答案 0 :(得分:0)

我不熟悉您使用的语法。如果您要查找的是与ID为TitleList且ID为43的所有用户,您可以写下以下内容:

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

或简单地说:

TitleList.find(43).users

答案 1 :(得分:0)

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

where会返回一个数组,您可以在最后处理.first

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

或类似于你所拥有的:

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

我并不认为all可以使用参数。我尝试时看到了一个错误。

ArgumentError: wrong number of arguments (1 for 0)