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

时间:2013-02-27 16:04:33

标签: ruby-on-rails haml html-form

使用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以尝试了解如何将表单定向到正确控制器的正确方法。

2 个答案:

答案 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。

希望它有所帮助。