使用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 / activate_foobar”。它似乎不理解url参数。
在foobar的索引页面上,有一个表单我试图发布到foobar_controller的方法activate_foobar。 Foobar没有模型,因为没有这样的对象 - 它只是Widget的一个专门属性。 (Widget有一个模型和一个方法.activate_foobar)
activate_foobar_foobar_index在路由中定义为:
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_foobar
在使用表单(而不是使用simple_form_for或其他基于模型的解决方案)的范围内,如何更正路径“foobar / activate_foobar”?
来源: 我正在关注http://guides.rubyonrails.org/routing.html“添加更多RESTful操作”和http://www.w3schools.com/html/html_forms.asp以尝试了解如何将表单定向到正确控制器的正确方法。
答案 0 :(得分:1)
就像你说它将表单发送到/ activate_foobar,由于某种原因(也许是haml bug)它不会采取:controller param,在行动中解决这个问题
:action => 'foobar/activate_foobar'
但你必须小心,因为它需要相对路线而不是绝对路线。因此,如果您不想处理该问题,我建议您更改为rails form helper
= form_tag(activate_foobar_foobar_index_path, :method => :post) do
答案 1 :(得分:0)
因为activate_foobar嵌套在foobar下你尝试了吗
:url => activate_foobar_foobar_index_path(@foobar)
你需要告诉rails在哪里寻找特定的foobar到activate_foobar。
希望它有所帮助。