Ruby on rails 如何为Rails中不同表上的条件创建has_many_和would_to association?

Ruby on rails 如何为Rails中不同表上的条件创建has_many_和would_to association?,ruby-on-rails,ruby,ruby-on-rails-3,devise,associations,Ruby On Rails,Ruby,Ruby On Rails 3,Devise,Associations,我有一个用户表格,用于用户模型,该表格是通过designe创建的,角色表格用于角色模型。用户和角色都与HABTM相关 roles: id: integer name: string roles_users: user_id:integer roles_id:integer 我有三个角色:管理员、经理和记者 现在,我创建了一个团队模型,如下所示: teams: name: string 我希望一个团队有多个经理 因此,如果我创建一个团队: t = Team.create(name: 'Foo

我有一个用户表格,用于
用户
模型,该表格是通过designe创建的,角色表格用于角色模型。
用户
角色
都与HABTM相关

roles:
id: integer
name: string

roles_users:
user_id:integer
roles_id:integer
我有三个角色:管理员、经理和记者

现在,我创建了一个
团队
模型,如下所示:

teams:
name: string
我希望一个团队有多个经理

因此,如果我创建一个团队:

t = Team.create(name: 'Football')
然后,我想找到所有管理“足球”团队的经理(角色为“经理”的用户)。所以,我在团队和用户之间创建了HABTM

teams_users:
team_id:integer
user_id:integer
我需要一个关联:
managers
inside
Team
model。但是,到目前为止,此代码不起作用:

class Team < ActiveRecord::Base
  attr_accessible :name

  validates :name, presence: true

  has_and_belongs_to_many :managers, class_name: 'User', association_foreign_key: 'user_id', conditions: joins(:roles, :roles_users).where('roles_users.role_id = ?', Role.select('id, name').find_by_name('manager').id)

end

我做错了什么?有什么建议吗?

按如下方式设置关联:

has_and_belongs_to_many :managers, class_name: 'User', 
                        association_foreign_key: 'user_id', 
                        include: :roles, 
                        conditions: ['roles_users.role_id = ?', Role.select('id, name').find_by_name('manager').id]
由于在团队上未找到名为“角色”的
关联,您将收到此错误,因为您试图调用
角色
角色的关联。\u用户
团队
上(使用
条件
选项),并且
团队
与它们都不关联


在这种情况下,您需要使用
include
选项指定二阶关联,以便
角色的关联应用于
用户
表,而不是
团队

什么不起作用?你从t.managers那里得到了什么?它与您的预期输出有何不同?请参阅更新的问题。我已经添加了错误跟踪。是的,差不多了。唯一的问题是它给出了这个错误:
ActiveRecord::StatementInvalid:Mysql2::error:where子句中的未知列“roles\u users.role\u id”:从团队的where(
roles\u users
.role\u id=2)中选择COUNT(*)。它将“roles\u users.role\u id”作为一个整体列。有什么想法吗?没关系。我让它工作了。谢谢你的帮助。更新此:
has_和_-belish_-to_-many:managers,class_-name:'User',association_-foreign_-key:'User_-id',包括:[:roles],条件:['roles_-users.role_-id=?',role.select('id,name')。在代码中按_-name('manager').id]
查找,以便我可以接受它作为最终答案。再次感谢您指出
包含
选项,我完全错过了它。很好!现在您还可以直接指定
include::roles
而不是
include:[:roles]
您也需要删除
where
子句。因为它是第一级活动记录查询。因此,它将
roles\u users.role\u id
视为一列。请在你的答案中更新它。
has_and_belongs_to_many :managers, class_name: 'User', 
                        association_foreign_key: 'user_id', 
                        include: :roles, 
                        conditions: ['roles_users.role_id = ?', Role.select('id, name').find_by_name('manager').id]