这是我的SQL语句:
SELECT *
FROM `message_users`
LEFT JOIN `messages` ON message_users.message_id = messages.id
WHERE (message_users.user_id = 1 AND message_users.hidden = 0) AND message_users.last_read_at > messages.updated_at
ORDER BY messages.updated_at DESC LIMIT 0, 20
如何通过适当的Rails连接/包含/其他方式将其拉出来?
答案 0 :(得分:1)
您通常不会将多个表中的所有数据加载到rails中的一个模型中。更常见的是用 include 替换下面的 join ,这将预先加载相关模型,以便在调用 message.message_users 时点击缓存。无论如何,只要在消息和 messages_users 之间没有列名冲突,这就应该复制你的sql正在做什么。
如果在执行查询后不需要messages_users中的数据,则可以删除选择片段。
Message.find(:all,
:joins=>:message_users,
:select=>"message_users.*, messages.*",
:conditions=>['message_users.user_id = ? and message_users.hidden = ? and message_users.last_read_at > messages.updated_at', 1,0],
:order=>"messages.updated_at desc",
:limit=>20)
关于加入和包含 here
之间的区别,有一个很好的截屏视频