gpt4 book ai didi

ruby-on-rails-3 - rails 复杂的多对多查询

转载 作者:行者123 更新时间:2023-12-04 23:08:38 24 4
gpt4 key购买 nike

我有 3 个模型:用户、团队和成员(member) -

class Team < ActiveRecord::Base
has_many :memberships
has_many :members, :through => :memberships, :source => :user
end

class User < ActiveRecord::Base
has_many :memberships, :dependent => :destroy
has_many :teams, :through => :memberships

def team_mates
teams = Team.where(:members => id)
team_mates = teams.members
end
end

class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :team

validates :user_id, :presence => true
validates :team_id, :presence => true
end

而且,我不太清楚如何在 User 模型中编写 team_mates 方法。它应该返回一个包含 current_user 的团队中的其他用户的数组。我的想法是我应该使用一个范围来限制团队只包括当前用户是成员的团队,但我无法弄清楚语法。对此的任何帮助将不胜感激。

谢谢!

最佳答案

使用成员资格表查找与您调用该方法的用户共享任何团队的用户。然后要过滤掉与当前用户共享 1 个以上团队的重复用户,请使用 distinct。

我还没有测试下面的代码,但希望它能让你走上正确的道路:

def team_mates
m = Membership.scoped.table
Users.join(m).where(m[:team_id].in(team_ids)).project('distinct users.*')
end

更新

看起来该答案中的某些 Arel 方法无法轻松映射回 ActiveRecord 区域。 (如果有人知道怎么做,我很想知道!)而且它还返回“当前用户”。试试这个:
def team_mates
User.joins(:memberships).where('memberships.team_id' => team_ids).where(['users.id != ?', self.id]).select('distinct users.*')
end

关于ruby-on-rails-3 - rails 复杂的多对多查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5590762/

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