【问题标题】:Rails 4 - Finding objects by join table conditionRails 4 - 通过连接表条件查找对象
【发布时间】:2014-09-13 21:55:11
【问题描述】:

我有两个模型,UserTeam,这是一个带有名为 Member 的连接表的 many-to-many。它是这样设置的:

#Team:
has_many :members, dependent: :destroy
has_many :users, through: :members 

#User
has_many :members
has_many :teams, through: :members

#Member
belongs_to :user
belongs_to :team

我希望用户能够访问彼此的个人资料页面 (controller: :users, action: :show)。在个人资料页面上,我只想列出两个用户都属于的团队(他们也可以是不同团队的成员)。

我尝试的是这样的:

#UsersController
def show 
  @user = User.find(params[:id])
  @teams = @user.teams.joins(:members).where(:members => { :user_id => current_user.id })
end

这个不行(有的时候不显示队伍,有的时候显示错误的队伍,完全失败!)

那么,做我想做的事的正确方法是什么?只列出两个用户所属的团队?

【问题讨论】:

    标签: sql ruby-on-rails ruby postgresql activerecord


    【解决方案1】:

    通过相交找到你想要的team_id:

    @teams = Team.find(@user.members.pluck(:team_id) & current_user.members.pluck(:team_id))
    

    注意:如果您已经加载了成员集合,您可以使用 collect(&:team_id) 而不是 pluck(:id) 来节省对数据库的额外调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      相关资源
      最近更新 更多