【问题标题】:Using Active Record to Find a Join Table使用 Active Record 查找连接表
【发布时间】:2013-01-01 07:49:06
【问题描述】:

我有几个与:has_many => :through 关系关联的模型:

class User < ActiveRecord::Base
  has_many :group_members
  has_many :groups, :through => :group_members
end

class Group < ActiveRecord::Base
  has_many :group_members
  has_many :users, :through => :group_members
end

class GroupMembers < ActiveRecord::Base
  belongs_to :group
  belongs_to :user
end

使用 ActiveRecord 很容易找到组和用户之间的关系:

groups = @user.groups
users = @group.users

但是如果我想找到一个组和一个用户共享的连接表怎么办?现在我能想到的最好的解决方案是使用类方法。例如,在用户模型中,我有:

def group_member_for(group)
    self.group_members.where(:group_id => group.id).first
end

这很好用,但我怀疑有一种更清洁的方法。甚至可能是一种直接使用 ActiveRecord 关联的方法。比如:

group_member = @user.groups.group_member

【问题讨论】:

    标签: ruby-on-rails rails-activerecord


    【解决方案1】:

    您可以简单地执行以下操作:

    user.group_members
    # and
    group.group_members
    # or
    GroupMember.where(user_id: user.id, group_id: group.id)
    

    【讨论】:

    • 前两个如何按照 OP 的要求执行?对我来说似乎很不一样?
    • Rails 没有像user.group_members(group) 这样的便捷方法来获取相关记录,这似乎很愚蠢。
    • @MichaelFok 你可以运行user.groups.find(group.id)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多