Rails3加入了关联

时间:2013-08-17 10:01:29

标签: ruby-on-rails-3 join associations

我在rails3中使用连接时遇到问题。

有两种型号:

class User < ActiveRecord::Base
end

class Post < ActiveRecord::Base
  belongs_to  :master,class_name: 'User'
end

当我试图找到这样的帖子时,用户模型有'name'字段:

Post.joins(:master).where("master.name like '%mike%'")

出错了,日志显示如下:

ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'master.name' in 'where clause': SELECT `posts`.* FROM `posts` INNER JOIN `users` ON `users`.`id` = `posts`.`master_id` WHERE (master.name like '%mike%')

我想也许我会给用户一个别名,但是怎么样?

我知道它会像这样工作:

Post.joins("join users master on posts.master_id=master.id").where("master.name like '%mike%'")

但还有更好的方法吗?有什么人帮我解决这个问题?

2 个答案:

答案 0 :(得分:0)

如果你添加这一行

has_many :posts

到您的User类,应该可以通过以下查询得到您想要的内容:

User.where("name like ?", "%mike").map(&:posts)

答案 1 :(得分:0)

试试这个:

Post.joins(:master).where("users.name like '%mike%'")

假设您有users模型的User表。