2011-02-10 8 views
9

Próbuję znaleźć wszystkie rekordy, w których spełnione są dwa warunki. Na przykład:znajdź wszystkie rekordy, w których są spełnione dwa warunki

ruby-1.8.7-p302 > Person.all 
=> #<Person name: "Jane", city: "Green Bay", state: "Wisconsin", single: true> 
=> #<Person name: "Dick", city: "Madison", state: "Wisconsin", single: false> 
=> #<Person name: "Tom", city: "Milwaukee", state: "Wisconsin", single: true> 

Chcę uzyskać zapisy "Jane" i "Tom". Próbuję to, ale to nie działa:

Person.find_all_by_state("Wisconsin").find_all_by_single(true) 

Odpowiedz

37

Person.where(:state => "Wisconsin", :single => true)

+2

Dla przypomnienia, w nowszych Ruby, można zrobić 'Stan:„Wisconsin”Single: TRUE, ponieważ zmienił składni dosłownego Hash dla tych z symbolem klawiatura. –

9

pójdę z odpowiedzią dmarkow, ale jak trochę dodatkowych ciekawostek można też zrobić to:

Person.find_all_by_state_and_single("Wisconsin", true) 

Łańcuch tyle pól za pomocą _and_ zgodnie z potrzebami. Składnia where jest jednak o wiele starsza.

+0

Jest o wiele ładniejszy, ale to faktycznie działa dla mnie. Używam klejnotu Plucky i nie daje oczekiwanego wyniku za pomocą klauzuli where. – sybind

+1

user368937: To jest stara składnia, która była normą w Rails 2. dmarkow jest dla Rails 3. –

2

Przykład wykorzystania warunek OR:

model_name.where("field_1 = ? OR field_2 = ?", params[:search_string], params[:search_string]) 
Powiązane problemy