まさしく 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 とか思うようになってしまってる今日この頃