2013-08-17 58 views
1

我在使用rails3中的連接時遇到了問題。Rails3加入協會

有兩種模式:

class User < ActiveRecord::Base 
end 

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

用戶模型有「姓名」字段,當我試圖找到一些帖子是這樣的:

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%'") 

但有沒有更好的辦法?任何機構善意幫助我解決這個問題?

+0

嘗試做Post.master.where(「name like'%mike%'」)或Post.joins(:master).where(「name like'%mike%'」) –

+0

它確實有效,但如果Post發生有'名稱'屬性',它會再次失敗。無論如何,它解決了我目前的問題。謝謝 – sam

回答

0

試試這個:

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

假設您有users表的User型號。

+0

是的,它會在將主人更改爲用戶時起作用。我想知道是否有更好的方法。 :D – sam

+0

這是我通常在需要時進行的方式。可能有一些更好的方法來做到這一點。 – manoj2411

0

如果添加此行

has_many :posts 

到User類,應該可以得到你想要的東西有以下查詢:

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