使用动态细分提交表单到Rails路由

时间:2012-10-28 22:33:49

标签: ruby-on-rails forms routing routes

我的路线看起来像

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

我想要一个带有行星编号和月亮编号选择框的表格,并让它提交到此路线。但是,我无法使用moon_path,因为如果动态参数未包含在moon_path(4, 1)中,则会出现错误。我想要的甚至可能吗?如果是这样,我应该为路线的表格标签提供什么?

2 个答案:

答案 0 :(得分:0)

你没有拥有来使用路由助手方法,而在这里你不能因为在渲染表单时你不知道所需的参数。但是,您确实知道控制器和操作,这实际上是目标URL所需要的。所以这应该有效:

= 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

答案 1 :(得分:0)

如果你在控制器上使用这个参数,你需要指定每个参数,你帮忙你需要做这样的事情

moon_path(planet_moon: 4, moon_num: 1)

干杯!