我如何在Rails中进行此操作?

时间:2009-12-04 20:05:50

标签: sql mysql ruby-on-rails

这是我的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连接/包含/其他方式将其拉出来?

1 个答案:

答案 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

之间的区别,有一个很好的截屏视频