2016-03-29 1 views
0

Utilisation de la requête d'enregistrement actif Comment faire la requête sql suivante?comment faire cette requête SQL brute en utilisant requête d'enregistrement actif?

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} 

J'ai essayé

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

Cela fait presque ce que je veux cependant fait certains événements. * Et non sélectionner .

J'ai ensuite essayé

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

Cela renvoie cependant un objet ActiveRelation et je ne suis pas sûr de savoir comment obtenir mes résultats sur ce sujet.

J'ai aussi essayé

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

et cela génère une erreur.

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

Vous ne savez pas quoi d'autre essayer. Est-ce que ce que j'essaie de faire n'est pas possible?

+1

Un objet de relation active est ce que vous voulez. Appelez simplement une méthode qui fera exécuter la requête - par exemple 'all' ou' each' ou 'to_a' (pour le convertir en un tableau) –

Répondre

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

Le problème est que cet événement renvoie. * Et n'est pas le même que le requête SQL brute, je suis en train de recréer. Je veux que la requête retourne tous les champs des tables jointes dans une seule requête. – Riina

+0

J'ai modifié ma réponse – archana

+0

Merci, mais je ne comprends pas comment puis-je accéder aux tables jointes à partir des résultats retournés? Il semble juste retourner l'événement, je ne vois aucune des colonnes jointes. La requête sql brute renvoie une liste de hachages qui contiennent toutes les colonnes jointes pour chaque résultat renvoyé, je ne vois pas où se trouvent les données équivalentes, dans le résultat de la requête d'enregistrement actif que vous avez donné. – Riina