2010-11-14 81 views
6

這似乎應該是如此簡單,但它一直在引起我的問​​題。rails form_tag url path

我有一個select_tag從模型中拉出。我想要的是讓一個人從下拉菜單中選擇他們的位置,按提交併把它帶到那個地方頁面。

這裏是我有什麼

<% form_tag installation_path do %> 
<%= select_tag :id, options_from_collection_for_select(Installation.find(:all), :id, :name) %> 
<div id="button"> 
    <p> 
    <%= submit_tag "Go", :name => nil %> 
    </p> 
</div> 

問題是,它當然希望有一個:id但它不會從下拉菜單下面拉:id

我在做什麼錯,在「正確」的方式做任何其他建議。

感謝

回答

5

看起來你真正想要得到的,不張貼PARAMS。

form_tag installation_path, :method => :get do 
+0

首先謝謝!使用錯誤的方法是一個問題。但是,爲了使路由更正,它需要是installation_path(id)。但是,被拉的id是來自collection_select的數組的id。有任何想法嗎?看起來這個簡單的任務似乎並不那麼困難。 – looloobs 2010-11-14 17:30:57

+3

這是事情,你想提交表單,然後去'/ installations /:id'。相反,您將以'/ installations?id =:id'結尾。所以你可以給Rails一個路由'match'/ installations',:to =>'installations#show''。該路線的問題是 - 它與索引衝突。因此,你應該有一個特殊的路線:'match'/ goto_installation'=>'installations#show',:as =>'goto_installation''。然後在你的表單中:'form_tag goto_installation_path,:method =>:get do'。然後在你的控制器的過濾器之前,你可以'redirect_to installation_path(:id => params [:id])'來獲得所需的url。 – 2010-11-14 18:35:30

+0

嗨,我剛剛回到這,原來我不能使用「匹配」,因爲我還沒有運行rails3。任何想法如何做到這一點。我只是不明白爲什麼這是如此複雜。似乎總是這樣做,但我似乎無法找到任何指導。提前致謝。我感謝您的幫助。 – looloobs 2010-12-10 23:15:40