Rails 询问一个 SQL 语句怎么转成 ActiveRecord 的写法

lin_style · 2012年04月27日 · 最后由 lin_style 回复于 2012年05月02日 · 3638 次阅读
select * from users_messages t1  left join messages t2 on t1.message_id = t2.id where t1.id=20


class UsersMessages has_many :messages end

UsersMessages.find(20).messages

大概是这样吧。

joins("left join messages on users_messages.message_id = messages.id").where("users_messages.id=20")

貌似你应该把这 2 个表关联起来,关联之后就可以 joins(:message) 了

有点复杂的建议还是用 SQL 语句

我是觉得如果库更换不频繁,还不如就直接写 SQL。。

ActiveRecord::Base.connection.select("select * from users_messages t1 left join messages t2 on t1.message_id = t2.id where t1.id=20")

这个时候就显示出 Sequel 的可贵之处了

irb> DB[:user_messages_t1].left_join(:messages_t2).where(:"t1.id" => 20).sql

"SELECT * FROM user_messages As t1 LEFT JOIN messages AS t2 WHERE (t1.id = 20)"

#8 楼 @nouse 有什么可贵呢?指教

#7 楼 @oncity 有个问题。。查出来的集合如何用呢? 直接.name ,提示 hash 错误

#10 楼 @lin_style 没有建 model,不会有 .name 访问,用 hash 不行吗,不是更节省。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号