2010-08-29 2 views
21

ich derzeit zwei aktive Datensatz Abfragen, die Ich mag würde zusammen kombinierenKombinieren Sie zwei Activeabfrageergebnisse

 
joins("join relationships ON user_id = followed_id"). 
       where("follower_id = #{user.id}") 

und

 
where(:user_id => user.id) 

Grundsätzlich möchte ich die Ergebnisse des zweiten mit dem erscheinen zuerst ähnlich wie eine UNION Anweisung in SQL. Kann es auf diese Weise in ActiveRecord gemacht werden?

Ich würde lieber eine Union lieber verwenden, die alle followed_id s in einer Zeichenfolge und verwenden Sie die IN Klausel in SQL.

Irgendwelche Ideen?

----- ------ bearbeiten ich nach einem Weg suchen, dieses zu erhalten mit verzögertes Laden zu arbeiten

Antwort

12

Verwendung relation & relation:

Model.joins("join relationships ON user_id = followed_id").where("follower_id = {user.id}") & Model.where(:user_id => user.id) 
+6

Dies zwingt ActiveRecord, die Ergebnisse in einem Array bereitwillig zu platzieren. Kann das mit lässigem Laden gemacht werden? – zzawaideh

+0

btw .. Ich habe deine Antwort abgewählt, da sie mich dorthin gebracht hat. – zzawaideh

+0

Sollte das nicht eine Beziehung sein | Beziehung? ActiveRecord :: Relation quakt wie ein Array und [1] & [2] == [] aber [1] | [2] = [1,2]. – mtjhax

28

Das ist für mich nützlich war :

Model.where(...) | Model.where(...) 
+0

Sie haben mich hier gespeichert. Danke Freund – Abram

+3

Eigentlich funktioniert das nicht wie erwartet. – Abram

+15

Dies konvertiert das ActiveRecord_Relation in Array-Objekt. Sie können keine aktiven Aufzeichnungsmethoden wie .where usw. auf die resultierenden Objekte anwenden – CodeExpress