我是 Rails 的新手,并尝试在 mysql 中执行左连接。
有两个对象——用户和消息。
用户 has_and_belongs_to_many 消息,消息 has_and_belongs_to_many 用户
目前,通过简单地编写 user.messages 我在控制台中得到以下查询
SELECT * FROM `messages` INNER JOIN `messages_users` ON `messages`.id = `messages_users`.message_id WHERE (`users_messages`.group_id = 1 )
限制==false 的消息未连接到任何用户,但任何用户都可以访问,我需要将集合 Message.all(restricted=>false) 添加到 user.messages
可以解决我的问题的查询是:
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);
我如何尽可能优雅地在rails中编写它?
会不会像
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 " )
或者可以更好吗?
我正在使用导轨 2.3.2
谢谢,帕维尔