Ruby on rails Rails Haml表单url参数-如何使html表单使用所需的Rails路由

Ruby on rails Rails Haml表单url参数-如何使html表单使用所需的Rails路由,ruby-on-rails,haml,forms,Ruby On Rails,Haml,Forms,使用HAML代码: %form{:action => "activate_foobar", :method => :post, :controller => "foobar", :url => activate_foobar_foobar_index_path} %input{:type => "submit", :value => "Activate"} “提交”按钮指向 No route matches "/activate_foobar" 而不是“/

使用HAML代码:

%form{:action => "activate_foobar", :method => :post, :controller => "foobar", :url => activate_foobar_foobar_index_path}
%input{:type => "submit", :value => "Activate"}
“提交”按钮指向

No route matches "/activate_foobar"
而不是“/foobar/激活_foobar”。它似乎不理解url参数


详细信息 在foobar的索引页面上,有一个表单我正试图发布到foobar\u控制器的方法activate\u foobar。Foobar没有模型,因为没有这样的对象——它只是Widget的一个专门属性。(小部件有一个模型和一个方法。激活\u foobar)

激活\u foobar\u foobar\u索引在路由中定义为:

resources :foobar, :only => [:index] do
  collection do
    post :activate_foobar
  end
end
:通过rake确认:路线为:

activate_foobar_foobar_index POST     /foobar/activate_foobar(.:format)   {:action=>"activate_foobar", :controller=>"foobar"}
:如预期

此外,使用简单的

=link_to "Activate", activate_foobar_foobar_index_path, {:method => :post}
:已成功路由到/foobar/activate\u foobar

在使用表单的范围内(不使用简单表单或其他基于模型的解决方案),如何更正路径“foobar/activate\u foobar”

资料来源:
下面我将介绍“添加更多RESTful操作”,并试图了解如何将表单定向到正确控制器的正确方法。

既然activate\u foobar嵌套在foobar下,您是否尝试过这样做

 :url => activate_foobar_foobar_index_path(@foobar) 
您需要告诉rails在哪里查找特定的foobar来激活\u foobar


希望有帮助。

就像你说的那样,它会将表单发送到/activate\u foobar,出于某种原因(可能是haml bug),它不会使用:controller参数来解决这个问题

:action => 'foobar/activate_foobar'
但你必须小心,因为它采取的是相对路线,而不是绝对路线。所以,如果您不想处理这个问题,我建议您更改为rails表单助手

= form_tag(activate_foobar_foobar_index_path, :method => :post) do

无论是否使用控制器参数,显式设置相对路由都会导致立即注销。表单标签正是我所需要的!谢谢