2010-12-17 9 views

Antwort

4

Es gibt keine solche Methode in Rails.

Ich denke, dass der einfachste Weg, eine ODER in eine tun WHERE-Klausel, so etwas zu tun ist:

User.where("first_name = ? OR last_name = ?", params[:first_name], "Wilson") 

Wenn Sie die Arel Methoden lernen wollen (was hat ein „oder“ Methode) , schaue hier: https://github.com/rails/arel#readme. Mit Arel und Active, können Sie das gleiche tun, wie folgt:

User.where(User.arel_table[:first_name].eq(params[:first_name]).or(User.arel_table[:last_name].eq('Wilson'))) 
+0

Hinweis für Besucher: Sie können diese Methode/Soln mit dem gleichen Spaltennamen für mehrere Abfragen verwenden, zB "Model.where ('name =? OR name =? ODER name =?', 'South Carolina', ' South_Carolina ',' South Carolina ') etc ... natürlich könnten Sie dieses Problem auch mit anderen Methoden lösen, aber dieses würde auch funktionieren –

2

Sie einen Blick auf meta_where nehmen. Dieses Gem ermöglicht leistungsfähigere ActiveRecord-Abfrageausdrücke in Ruby-Code, ohne dass SQL-Fragmente gelöscht werden müssen.

2

Einfach mit User.where(cond1) | User.where(cond2), die || ist reserviert von Ruby!

+1

Es ist wahr, dass dies das gleiche Ergebnis, aber es macht tatsächlich zwei SQL-Abfragen und verwendet den Ruby Array-Vereinigungsoperator ([Array # |] (http://www.ruby-doc.org/core/classes/Array.html#M000275)), um die Ergebnisse in einem Array zu verketten. Sie können die SQL-Abfragen sehen, indem Sie die rails-Konsole ausführen und sie wie folgt in STDOUT anmelden: 'ActiveRecord :: Base.logger = Logger.new (STDOUT)', dann 'User.where (cond1) | User.where (cond2) '. – dontangg