2011-01-26 48 views
5

具體來說,假設我們有兩個顯機型:Rails 3有find_by關聯魔法嗎?

  1. TieDyeCentipede,這has_many :legs
  2. Leg,其中有一個:color屬性。

作爲一個TieDyeCentipede,沒有兩條腿永遠是相同的顏色。事實上,在我們所有的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 2011-01-26 14:05:53

3

嘗試TieDyeCentipide.joins(:legs).where(:legs => {:color => :deep_sky_blue}).first

對於find_by_*方法或類似的東西,我建議Pacecar,它產生的AR模型中的許多有用的範圍。

+0

謝謝你的回答! – ClosureCowboy 2011-01-26 14:07:12