Ich bin Neuling in Schienen und versuchen, linke Join in Mysql durchzuführen.links beitreten in Rails/mysql
gibt es zwei Objekte - Benutzer und Nachricht.
Benutzer has_and_belongs_to_many Nachrichten, Nachrichten has_and_belongs_to_many Benutzer
zur Zeit durch einfaches Schreiben user.messages i in der Konsole folgende Abfrage erhalten
SELECT * FROM `messages` INNER JOIN `messages_users` ON `messages`.id = `messages_users`.message_id WHERE (`users_messages`.group_id = 1)
Nachricht mit eingeschränkten == false ist nicht auf einen Benutzer verbunden, sondern ist zugänglich für jeden Benutzer, und ich muss Sammlung hinzufügen.all (eingeschränkt => falsch) zu user.messages
die Abfrage, die mein Problem lösen würde wäre:
select * from messages left join messages_users on messages_users.message_id=messages.id and messages_users.user_id=1 where (messages_users.user_id is NULL and messages.restricted=false) OR (messages_users.user_id=1 and messages.restricted=true);
Wie schreibe ich es so elegant wie möglich in Schienen?
wäre es smth wie
Message.find(:all,:conditions => "(messages_users.user_id is NULL and messages.restricted=false) OR (messages_users.user_id=1 and messages.restricted=true)", :joins => "left join messages_groups on messages_users.message_id=messages.id and messages_users.user_id=1 ")
oder kann es schöner sein?
ich bin mit Schienen 2.3.2
Dank, Pavel
... aber würde '' include' 'auch eine eifrige Ladung der zugehörigen Datensätze durchführen, was in der aktuellen Situation nicht wünschenswert erscheint. Das ist das Problem, das ich gerne lösen würde. – Purplejacket