我有两个模型,User
和Team
,它是一个many-to-many
,其中有一个名为Member
的连接表。它设置如下:
#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
这不起作用(在某些情况下不显示任何团队,其他人显示错误的团队,总失败!)
那么,做我想要的正确方法是什么?只列出两个用户都是其成员的团队?
答案 0 :(得分:2)
只需交叉即可找到您想要的team_ids:
@teams = Team.find(@user.members.pluck(:team_id) & current_user.members.pluck(:team_id))
注意:如果您已加载成员集合,则可以使用collect(&:team_id)
而不是pluck(:id)
来保存对数据库的额外调用。