2016-06-29 6 views
1

Ich habe eine Active Record-Abfrage, die sich in einem Edelstein befindet. Die verwendete Datenbank ist Postgres.Aktiver Datensatz von Rails, der keine Klausel enthält

Client.where(date:@date,client:@business_id) 

Der Edelstein verwendet eine Get-Anforderung, um diese Daten zu ziehen. Wenn zu viele Werte in @business_id vorliegen, ist der URI zu lang. Gem hat keine Post-Anfragen.

Umgehung:

Das Geschäft Problem ist, wenn alle @business_id an die App übergeben bekommen. Ich könnte einen "alle" Knopf haben, der alle client Werte zum Zeigen auslöst. Ich müsste den Teil client:@business_id der Abfrage ignorieren.

Wie kann ich die Abfrage so erstellen, dass, wenn alle der @business_id übergeben werden müssen, es den client:@business_id Teil der Abfrage ignoriert?

Antwort

2

Kette der where-Klausel und dann bedingt sind oder die @business_id Teil ausschließen:

relation = Client.where(date:@date) 
if your_conditional_is_true 
    relation = relation.where(client:@business_id) 
end 
the_clients = relation.all 

Der Grund dies funktioniert, ist, dass, wo gibt tatsächlich eine ActiveRelation, nicht die Ergebnisse der SQL-Ausführung. Die SQL wird erst erstellt und ausgeführt, wenn Sie etwas an den Ergebnissen der Beziehung bearbeiten.

+0

Was für eine großartige Antwort .. so nützlich für andere Sachen auch – HoosierCoder

Verwandte Themen