私はRailsの初心者で、mysqlで左結合を実行しようとしています。
ユーザーとメッセージの2つのオブジェクトがあります。
ユーザー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);
できるだけエレガントにレールに書き込むにはどうすればよいですか?
それはsmthのようになりますか
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
ありがとう、パベル