2011-01-26 12 views
5

Specificamente, supponiamo che abbiamo due modelli sensibili:Rails 3 ha trovato la magia di associazione?

  1. TieDyeCentipede che has_many :legs
  2. Leg, che ha un attributo :color.

Essendo uno TieDyeCentipede, non ci sono mai due gambe dello stesso colore. In effetti, il colore di una gamba particolare è unico tra all delle gambe di tutti i nostri TieDyeCentipedes.

In base a tale unicità, vogliamo trovare un particolare Centipede da un particolare colore di gamba - diciamo :deep_sky_blue.

avrei potuto fare qualcosa di simile:

critter = Leg.find_by_color(:deep_sky_blue).tie_dye_centipede

Tuttavia, c'è un metodo find_by_* sulla classe TieDyeCentipede che potrei usare come bene?

risposta

6

Niente magia:

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

qualche magia:

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

Ratti! Bene, grazie per la risposta. Speravo che avesse qualche magia incorporata! – ClosureCowboy

3

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

Per un metodo find_by_* o qualcosa di simile, mi consiglia Pacecar, che genera molti scopi utili per i vostri modelli AR.

+0

Grazie per la risposta! – ClosureCowboy

Problemi correlati