Rails 4 – 通过连接表条件查找对象
我有两个模型, 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
这不起作用(在某些情况下不显示任何团队,并且其他人显示错误的团队,总失败!)
那么,做我想要的正确方法是什么? 仅列出两个用户所属的团队?
只需交叉即可找到您想要的team_ids:
@teams = Team.find(@user.members.pluck(:team_id) & current_user.members.pluck(:team_id))
注意:如果您已经加载了成员集合,则可以使用collect(&:team_id)
而不是collect(&:team_id)
pluck(:id)
来保存对数据库的额外调用。
- ActiveRecord:定义关联时,将类而不是字符串传递给class_name
- 获取每个组的第一条记录列表
- ActiveRecord序列化与Hash列无法正常工作
- Rails 3连接 – 仅选择某些列
- ActiveRecord在一个表上不起作用
- 将ActiveRecordvalidation错误转换为API耗材错误
- object.valid? 返回false但object.errors.full_messages为空
- ActiveRecord错误:SAVEPOINT active_record_1不存在
- 在Rails ActiveRecord中,连接在命名空间模型中不能与has_and_belongs_to_many一起使用