2016-03-29 4 views
0

Mit Active Record-Abfrage, wie mache ich die folgende SQL-Abfrage?wie diese rohe SQL-Abfrage mit Active-Record-Abfrage zu tun?

sql = "select * from events 
inner join places on events.place_id = places.id 
inner join users on events.user_id = users.id" 
where events.id = #{event_id} 

Ich habe

versucht
Event.joins(:user, :place).includes(:user, place).find(event_id) 

Diese fast tut, was ich aber will die ausgewählten Veranstaltungen. * Und nicht wählen.

Ich habe dann versucht

Event.joins(:user, :place).select('*.*') 

Dies jedoch gibt ein ActiveRelation Objekt und ich bin nicht sicher, wie aus dieser meine Ergebnisse zu erhalten.

Ich habe auch versucht,

Event.joins(:user, :place).find(event_id) 

und dies wirft einen Fehler.

ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR: syntax error at or near "." 

Nicht sicher, was Sie sonst noch versuchen sollten. Ist das was ich versuche nicht möglich?

+1

Ein aktives Beziehungsobjekt ist das, was Sie wollen. Rufen Sie einfach eine Methode auf, die die Abfrage ausführen soll - zB 'all' oder' each' oder 'to_a' (um es in ein Array zu konvertieren) –

Antwort

0
Event.joins(:user, :place).where("events.id = ?", event_id).select("events.*, users.*, places.*") 
+0

Das Problem ist, dass das Ereignis zurückliefert. * Und nicht dasselbe ist wie das rohe SQL-Abfrage, die ich versuche, neu zu erstellen. Ich möchte, dass die Abfrage alle Felder aus den verknüpften Tabellen in einer einzigen Abfrage zurückgibt. – Riina

+0

Ich habe meine Antwort geändert – archana

+0

Danke, aber ich verstehe nicht, wie kann ich dann auf die verbundenen Tabellen aus den Ergebnissen zugreifen? Es scheint nur das Ereignis zurückzugeben, ich sehe keine der verbundenen Spalten. Die Raw-SQL-Abfrage gibt eine Liste der Hashwerte zurück, die alle verknüpften Spalten für jedes zurückgegebene Ergebnis enthalten. Ich sehe nicht, wo die entsprechenden Daten im Ergebnis der aktiven Datensatzabfrage enthalten sind. – Riina