2011-01-26 10 views
5

具体的には、我々は2つの賢明なモデルがあるとしましょう:Rails 3はfind_by関連のマジックを持っていますか?

  1. TieDyeCentipede:color属性を持つhas_many :legs
  2. Legを、。

TieDyeCentipedeであるため、2本の脚は全く同じ色ではありません。実際、特定の足の色はすべてのうち、私たちのすべてのTieDyeCentipedesの中でユニークです。

この一意性に基づいて、Centipedeという特定の脚色を見つけたいとします。たとえば、:deep_sky_blueとしましょう。

私のような何かを行うことができます:

critter = Leg.find_by_color(:deep_sky_blue).tie_dye_centipede

をしかし、私は同様に使用することができTieDyeCentipedeクラスのfind_by_*方法はありますか?

答えて

6

魔法:

TieDyeCentipede.joins(:legs).where(:legs => {:color => 'deep_sky_blue'}).first 

いくつかの魔法:

def self.find_by_leg_color(color) 
    TieDyeCentipede.joins(:legs).where(:legs => {:color => color}).first 
end 
+0

ラット!さて、答えに感謝します。私はそれがいくつかの組み込みの魔法を持っていることを望んでいた! – ClosureCowboy

3

find_by_*方法または類似のもののためにTieDyeCentipide.joins(:legs).where(:legs => {:color => :deep_sky_blue}).first

を試してみてください、私はあなたのARモデルのための多くの有用な範囲を生成する、Pacecarをお勧めします。

+0

が答えてくれてありがとう! – ClosureCowboy

関連する問題