2006-05-12 [長年日記]

_ [rails] has_many :through (2)

まさしく has_many :through なサイトを見て、 昨日の続き。:uniq とは関係ないけど。

class Group < ActiveRecord::Base
  has_many :assigns
  has_many :members, :through => :assigns
  has_many :leaders, :through => :assigns, :source => :leader,
             :conditions => ["leader = ?", true]
end

class Assign < ActiveRecord::Base
  belongs_to :group
  belongs_to :member
  belongs_to :leader, :class_name => "Member"
end

リンク先のは、:conditions の指定場所が間違ってるような気がする。

Group.find(:all).map(&:leaders).flatten.map(&:name)

ここでは :include しても proxy な方を叩くので、結局個別に :conditions を見るのか。 というか、ふつうに Assign 側から調べればいいことに今さら気づく。

Assign.find(:all, :include => :member, :conditions => ["leader = ?", true]).map{|a| a.member.name}

うーん、Symbol#to_proc ではメソッドチェーンは呼べないんですよね。 なんだよこの a って*1。というわけで、

class String
  def to_proc
    Proc.new{|obj| split(".").inject(obj){|res, meth| res.__send__(meth)}}
  end
end

Assign.find(:all, :include => :member, :conditions => ["leader = ?", true]).map(&"member.name")

OK。

遊んでないで、DWN やりまーす。

*1 とか思うようになってしまってる今日この頃

[]

«前の日記(2006-04-30) 最新 次の日記(2006-06-01)»