gpt4 book ai didi

ruby-on-rails - 是否可以向 Rails 4 中的 LEFT OUTER JOIN 添加条件?

转载 作者:行者123 更新时间:2023-12-04 02:21:18 33 4
gpt4 key购买 nike

鉴于这种结构:

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 子句中的条件,它只返回用户是其成员的团队列表,而不是与帐户关联的所有团队。

最佳答案

应该可以使用 joins 的字符串形式.在插入字符串之前清理任何用户输入。

Team.select(:id, :name).
select("teams_users.team_id IS NOT NULL AS member FROM teams").
joins("LEFT OUTER JOIN teams_users ON (teams.id = teams_users.team_id AND team_users.user_id = #{current_user.id})").
where(account_id: account.id)

关于ruby-on-rails - 是否可以向 Rails 4 中的 LEFT OUTER JOIN 添加条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28977413/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com