2011-07-08 209 views
0

我有相關的以下兩種型號:活動記錄查詢belong_to

class Post < ActiveRecord::Base 
    belongs_to :language 
end 

class Language < ActiveRecord::Base 
    has_many :posts 
end 

從視圖中我有一個鏈接,通過語言過濾帖子:

<div id="english"><%= link_to "English", {:controller => 'posts', :action => 'search_result', :language => "english"} %></div> 

模型語言有一個變量名:字符串,這是我用來進行活動記錄查詢的字符串。

的疑問,我已經是我怎麼可以從後控制器檢索其中有一個字段右邊的帖子這個查詢:language.name ==「英語」。

我嘗試這樣做:

@posts = Post.all(:conditions => ["language.name = ?", params[:language]]) 

而且這樣的:

@posts = Post.where(:language.name => params[:language]) 

希望我已經很好地解釋這個問題,我是一個相當新手呢。啊!我也知道在這種情況下使用「all」或「where」??會更好。 非常感謝。

回答

1

你需要做一個連接:http://guides.rubyonrails.org/active_record_querying.html#specifying-conditions-on-the-joined-tables

如果我理解正確的模型/數據庫結構,ActiveRecord的調用應該看起來像:

Post.joins(:language).where('languages.name' => params[:language]) 

希望有所幫助。

PS。 where呼叫是這些日子的首選方法。

+0

對不起,我編輯的問題,因爲我搞砸了西班牙語和英語,並在那裏我寫語我應該有書面語言。我嘗試了連接,但仍然沒有運氣。模型Post屬於語言和語言有一個名爲字段。所以我試過Post.joins(:language).where('language.name'=> params [:language]),但它給了我一個錯誤:SQLite3 :: SQLException:no such column:language.name。也許混亂是一種語言has_many帖子,而不是opossite ..我會繼續努力!感謝您的答案..我應該得到它使用連接工作。 – diegopau

+2

在WHERE子句中,你需要使用實際的表名,所以你應該試試:'Post.joins(:語言)。凡( 'languages.name'=> PARAMS [:語言])' – Adnan

+0

@ salt.racer @阿德南:不,這是行不通的,我已經試過了,我也得到:'的SQLite3 ::的SQLException:沒有這樣的列:language.name:選擇「上崗」 * FROM「上崗」 INNER JOIN「語言」 ON「。語言」,‘ID’=‘上崗’。‘LANGUAGE_ID’WHERE‘語言’,‘名’=「english'' ...這是肯定的,如果郵政的has_many語言(我檢查),但如果帖子belongs_to的語言文字工作。仍然堅持這一點,任何想法?謝謝! – diegopau