Mischen von ActiveRecord-Suchbedingungen

8

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?

    
Tony Pitale 17.09.2008, 14:14
quelle

7 Antworten

26

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%     
Laurie Young 17.09.2008, 14:20
quelle
7

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%     
Josh Schwartzman 17.09.2008 17:47
quelle
2

Das Schöne an named_scopes ist, dass sie auch an Sammlungen arbeiten:

%Vor%     
ismaSan 24.09.2008 14:57
quelle
1

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.

    
Sixty4Bit 17.09.2008 14:39
quelle
1

Sie können die where -Klausel verketten:

Person.where(name: ['foo', 'bar', 'baz']).where('id >= ?', 42).first

    
Sujoy Gupta 01.05.2013 02:33
quelle
0

Die bereits vorgeschlagenen Bereiche sind ziemlich gut. Der klassische Weg dazu wäre:

%Vor%     
Honza 17.09.2008 15:09
quelle
0

Ich denke, ich werde entweder einfache AR-Finder oder Searchgasm verwenden.

    
Tony Pitale 18.09.2008 04:11
quelle