2011-02-10 14 views
9

Sto provando a trovare tutti i record in cui due condizioni sono vere. Ad esempio:trova tutti i record in cui due condizioni sono vere

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> 

Desidero ottenere i record "Jane" e "Tom". Sto cercando questo, ma non funziona:

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

risposta

37

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

+2

Per la cronaca, nel più recente Ruby, si può fare 'state: "Wisconsin", singolo: true', perché hanno cambiato la sintassi letterale Hash per quelli con il simbolo chiavi. –

9

vorrei andare con la risposta di dmarkow, ma come un po 'di ulteriore curiosità si può anche fare questo:

Person.find_all_by_state_and_single("Wisconsin", true) 

Catena come molti campi utilizzando _and_ come desiderato. La sintassi where è tuttavia molto più ordinata di questa.

+0

È molto più ordinato, ma in realtà funziona per me. Sto usando la gemma di Plucky e non sta dando l'output atteso usando la clausola where. – sybind

+1

user368937: Questa è la vecchia sintassi che era la norma in Rails 2. dmarkow's è per Rails 3. –

2

Esempio utilizzando una condizione OR:

model_name.where("field_1 = ? OR field_2 = ?", params[:search_string], params[:search_string]) 
Problemi correlati