2011-01-26 11 views
5

Konkretnie, załóżmy, że mamy dwa modele jawnego:Czy Rails 3 ma powiązanie magii find_by?

  1. TieDyeCentipede, który has_many :legs
  2. Leg, który posiada atrybut :color.

Będąc TieDyeCentipede, żadna z dwóch nóg nie ma tego samego koloru. W rzeczywistości, szczególny kolor nogi jest unikalny wśród wszystkich naszych wszystkich naszych .

W oparciu o tę wyjątkowość chcemy znaleźć konkretną Centipede według określonego koloru nogi - na przykład :deep_sky_blue.

mógłby zrobić coś takiego:

critter = Leg.find_by_color(:deep_sky_blue).tie_dye_centipede

jest jednak istnieje find_by_* metoda od klasy TieDyeCentipede że mogę wykorzystać, jak również?

Odpowiedz

6

Nie magia:

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

Niektóre magiczne:

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

Szczury! Cóż, dziękuję za odpowiedź. Miałem nadzieję, że ma wbudowaną magię! – ClosureCowboy

3

Spróbuj TieDyeCentipide.joins(:legs).where(:legs => {:color => :deep_sky_blue}).first

dla metody find_by_* lub coś podobnego, ja polecam Pacecar, który generuje wiele przydatnych zakresów dla modeli AR.

+0

Dziękuję za odpowiedź! – ClosureCowboy