在has_many中是否有直接引用连接表的方法?

时间:2011-09-08 09:45:45

标签: ruby-on-rails activerecord

您能否以has_many :through关系引用联接表的属性?

经典联接关系:

class Committee
  has_many :positions
  has_many :members, through: :positions
end

class Member
  has_many :positions
end

class Positions
  belongs_to :committee
  belongs_to :member

  attr_accessible :description
end

这为我们提供了直接从委员会访问成员的好方法:

c = Factory :committee
first_member = members.first

通过关联访问联接表上的信息

有没有办法从这种关系中引用位置描述(存在于连接表中)?

e.g。

first_member_description = members.first.proxy.description

如果没有,那么访问特定委员会成员的描述的最简洁方法是什么?

我为什么要这样做?

我想这样做是因为我希望找到一个委员会成员,然后找到他们的描述:

peters_description = committee.members.find_by_first_name('Peter').proxy.description

1 个答案:

答案 0 :(得分:0)

您可以在Position类上添加finder:

class Position < ActiveRecord::Base
  belongs_to :committee
  belongs_to :member

  attr_accessible :description

  scope :find_all_by_first_name, lambda do |name|
    joins(:member).where("members.first_name = ?", name)
  end
end

这应该允许你这样做:

peters_description = committee.positions.find_all_by_first_name('Peter').first.description