form_for 的路由范围问题(部分)

Mav*_*ick 5 routing scope ruby-on-rails form-for

尝试路由:

scope :shortcut do
 resources :text_elems
end
Run Code Online (Sandbox Code Playgroud)

使用带有表单部分的基本脚手架

*_form.html.erb*
<%= form_for(@text_elem, :shortcut => @shortcut) do |f| %> 
...
Run Code Online (Sandbox Code Playgroud)

问题是:当我调用编辑操作时,表单 html 显示为:

<form ... action="/25/text_elems/25">
Run Code Online (Sandbox Code Playgroud)

注:动作正确呈现形式的行动:

<form ... action="/home/text_elems">
Run Code Online (Sandbox Code Playgroud)

因此,当 form_for 处理它的块时,我的 :shortcut 参数似乎被 :id 参数打败了。现在,如果我在 form_for 块中手动设置 :url => {...} ,我可以使用 :shortcut 参数正确路由操作,但我更愿意保持代码干燥,另外我想报告如果它确实是一个错误,这个问题就交给rails。

其他人可以确认这是一个错误吗?

Tar*_*ast 2

实际上,您可以将值作为完整散列传递,而不是尝试依赖默认的 to_param (如果您所做的只是传递 @text_elem ,则会调用该值)

<%= form_for({:id => @text_elem.to_param, :shortcut => @shortcut}) do |f| %> 
Run Code Online (Sandbox Code Playgroud)

但是,如果这实际上是嵌套资源,您也可以这样做:

<%= form_for([@shortcut, @text_elem]) do |f| %> 
Run Code Online (Sandbox Code Playgroud)