je suis novice dans les rails et essayer d'effectuer une jointure gauche dans mysql.gauche rejoindre dans les rails/mysql
Il existe deux objets - utilisateur et message.
messages has_and_belongs_to_many utilisateur, message utilisateurs has_and_belongs_to_many
actuellement, par user.messages simplement écrire i get suivantes requête dans la console
SELECT * FROM `messages` INNER JOIN `messages_users` ON `messages`.id = `messages_users`.message_id WHERE (`users_messages`.group_id = 1)
message avec restriction == false est pas connecté à un utilisateur, mais accessible par tout utilisateur, et j'ai besoin d'ajouter la collection Message.all (restricted => false) à user.messages
la requête qui permettrait de résoudre mon problème serait:
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);
comment l'écrire dans des rails aussi élégamment que possible?
serait-il smth comme
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 ")
ou peut-il être plus agréable?
J'utilise des rails 2.3.2
, grâce Pavel
... mais ne feraient pas non plus de ": include" également une charge ardente des enregistrements associés, ce qui ne semble pas souhaitable dans la situation actuelle. C'est le problème que j'aimerais résoudre. – Purplejacket