考虑以下结构:
class Account < ActiveRecord::Base
has_many :users
has_many :teams
validates :name, presence: true
end
class User < ActiveRecord::Base
belongs_to :account
has_and_belongs_to_many :teams
validates :name, presence: true
end
class Team < ActiveRecord::Base
belongs_to :account
has_and_belongs_to_many :users
validates :name, presence: true
end
目标是获取一个账户下所有团队的id/名称列表,以及指示给定用户是否属于该团队的标志。
在SQL中,我可以通过以下方式获得这个结果:
SELECT teams.id, teams.name,
teams_users.team_id IS NOT NULL AS member FROM teams
LEFT OUTER JOIN teams_users ON
(teams.id = teams_users.team_id AND team_users.user_id = ?)
WHERE teams.account_id = ?
有没有Rails 4 / ActiveRecord的方法可以获得相同的结果?我尝试过的每个尝试都把
teams_users.user_id = ?
条件推入WHERE子句中,这只返回用户是成员的团队列表,而不是与账户关联的所有团队。