Ich möchte Datensätze auf einer Kombination von created_on & gt; = einigen Datum UND Namen in einer Liste von Namen finden.
Für "& gt;=" müsste ich sql-Bedingung verwenden. Für "IN" müsste ich einen Hash der Bedingungen verwenden, wo der Schlüssel ist: name und der Wert ist das Array von Namen.
Gibt es eine Möglichkeit, die beiden zu kombinieren?
Sie können benannte Bereiche in den Schienen 2.1 und höher verwenden
%Vor%dann können Sie
tun %Vor%Oder Sie können named_scope ein Lambda geben, mit dem Sie Argumente übergeben können
%Vor%dann können Sie
tun %Vor%Wenn Sie eine ältere Version Rails verwenden, ist die Abfrage von Honza geschlossen, aber Sie müssen Klammern für die Zeichenfolgen hinzufügen, die in die IN-Bedingung gestellt werden:
%Vor%Die Verwendung von IN kann eine gemischte Sache sein: Es ist am schnellsten für ganze Zahlen und am langsamsten für eine Liste von Strings. Wenn Sie nur einen Namen verwenden, verwenden Sie unbedingt einen Gleichheitsoperator:
%Vor%Weitere Informationen zu named_scopes finden Sie unter Ryan's Ankündigung und Railscast auf named_scopes
%Vor%Wenn Sie Variablen an Ihre Bereiche übergeben wollen, müssen Sie ein Lambda verwenden.
Sie können die where
-Klausel verketten:
Person.where(name: ['foo', 'bar', 'baz']).where('id >= ?', 42).first
Ich denke, ich werde entweder einfache AR-Finder oder Searchgasm verwenden.
Tags und Links ruby ruby-on-rails activerecord