2012-10-28 26 views
1

我有一個看起來像提交表單到Rails的路線與動態段

match 'solar_systems/:planet_num/:moon_num' => 'solar_system#moon', :as => :moon 

我想有與數字地球和月亮數選擇框的表單,並將它提交的路線到這條路線。但是我不能使用moon_path,因爲如果動態參數沒有包含在moon_path(4, 1)中,它將會出錯。我甚至想要什麼?如果是這樣,我該給路由的表單標記做些什麼?

回答

0

你不要使用路由幫助器的方法,在這裏你不能因爲在渲染你的表單時不知道所需的參數。但是,您確實知道控制器和操作,這是目標網址所需的全部功能。所以這應該工作:

= form_tag('/solar_systems/moon') do 
    = select_tag(:planet_num, ... 
    = select_tag(:moon_num, ... 

這應該呈現窗體標記。處理請求,你也得再添路線,以便正確的控制器動作被稱爲:

match 'solar_systems#moon' => 'solar_system#moon', :via => :post 

或者,如果它在你的應用程序的情況下更有意義,你可以修改現有的路線,使參數可選:

match 'solar_systems(/:planet_num(/:moon_num')) => 'solar_system#moon', :as => :moon 

有關非機智路由的更多詳細信息,請參閱this Rails guide

+0

這不起作用,因爲我沒有任何其他路線匹配這個,所以我得到錯誤'ActionController :: RoutingError(沒有路由匹配[POST]「/ solar_systems/moon」):' – Aaron

+0

請看我的有關路線的補充。 – Thilo

0

如果使用此PARAMS控制器上,你需要指定什麼params爲每一個,順便說一句你幫手,你需要做這樣的事情

moon_path(planet_moon: 4, moon_num: 1) 

乾杯!

+0

對,我就是這樣使用它將它鏈接到特定的值。我試圖用值不知道的形式來使用它。雖然我開始相信,我正在嘗試做的事情在Rails中不可能實現,而無法在頁面上顯示一些JS。 – Aaron