2017-05-14 2 views
0

Ich bekomme für eine Abfrage eine ActiveRecord: Realtion, mit einem anderen Abfrageparameter bekomme ich das richtige Array wie erwartet und wie gewünscht zurück.ActiveRecord Abfrage zurück ActiveRecord: Relation

Wie bekomme ich das Array bei der Übergabe eines Wertes für die bot_client_id, und warum würde das Verhalten anders sein?

[20] pry(#<BotResponse>)> e = Event.where.has {(bot_client_id == 'aiaas-1409611358153-user-0147')} 
=> #<Event::ActiveRecord_Relation:0x15fe2a8> 

[21] pry(#<BotResponse>)> Event.where.has {(status == 'inactive')}.first 
=> #<Event:0x00000002ae1d50 
id: 1, 
bot_client_id: "aiaas-1409611358153-user-0147", 
keyword: "testing create event 1 minute from now", 
topic: nil, 
status: "inactive", 
channel: "telegram", 
created_date: 2017-05-06 20:37:24 UTC, 
tickle_expression: nil, 
time_of_day: "1 minute from now", 
next_occurrence: 2017-05-06 20:54:20 UTC, 
time_zone: nil, 
recurring: false> 

Antwort

2

Die Active Record query interface gibt eine Beziehung für fast jeden Methodenaufruf zurück. Dies ermöglicht es, Methodenaufrufe wie Foo.where(bar: true).join(:baz).order(:id) zu verketten.

Ein weiterer Vorteil ist, dass es nicht sofort die Abfrage gegen die Datenbank ausführt, sondern wenn das Ergebnis tatsächlich zum ersten Mal benötigt wird. Rails lädt den Datensatz, wenn Sie auf einer Beziehung bestimmte Methoden aufrufen, wie each, map, count, to_a, load oder first.

So ist der wichtige Unterschied zwischen Ihrem Beispiel ist nicht die bot_id oder die status, sondern dass Sie first in Ihrem zweiten Beispiel nennen, aber keine Methode, die die Datensätze aus der Datenbank in Ihrem ersten Beispiel laden würde.

Verwandte Themen