1

我有一条看起来像的路线

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

我想要一个带有行星编号和月球编号选择框的表格,并将其提交到这条路线。但是我不能使用moon_path,因为如果像这样不包含动态参数,它会出错moon_path(4, 1)。我想要的甚至可能吗?如果是这样,我应该为路线的表单标签提供什么?

4

2 回答 2

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

有关非资源路由的更多详细信息,请参阅此 Rails 指南。

于 2012-10-28T22:46:23.483 回答
0

如果你在控制器上使用这个参数,你需要指定每个参数是什么,顺便说一句,在你的助手中你需要做这样的事情

moon_path(planet_moon: 4, moon_num: 1)

干杯!

于 2012-10-28T23:13:56.180 回答