Rails中的嵌套路由错误

时间:2015-04-27 16:38:31

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 routes

在我的rails应用程序中,我有这条路线

resources :jobs do
  resources :job_applications, :path =>  'applications' do
    member do 
      put :change_stage
    end
  end
end

我的job_application控制器中有一个名为change_stage的方法 实际上我正试图在一个模态中改变job_application的一个参数,所以为此我在模态体中有这个

<%=form_for :job_application, :url => change_stage_job_job_application.(params[:application_status]), :html => {:method => :post, :class => 'form-horizontal' } do |f| %>

<%= label :status, 'reject' %>
<%= f.radio_button :application_status, 'reject' %><br>
<%= label :status, 'interview' %>
<%= f.radio_button :application_statuss, 'interview' %><br>
<%= label :status, 'hired' %>
<%= f.radio_button :application_status, 'hired' %>

<% end %>

但是我收到了这个错误

undefined local variable or method `change_stage_job_application' for #<#<Class:0xb463b49c>:0xb463ac04>

我的表格有什么问题

3 个答案:

答案 0 :(得分:1)

1)删除网址名称和参数

之间的点

2)在url的名字之后连接_path。

3)因为它是嵌套路由的成员方法,所以传递参数job和job_application。

<%=form_for :job_application, :url => change_stage_job_job_application_path(@job, @job_application), :html => {:method => :post, :class => 'form-    horizontal' } do |f| %>

答案 1 :(得分:0)

你应该使用change_stage_job_job_application_path(最后没有点)。

仅供参考:对于任何情况,最好检查Rails URL帮助程序名称是否使用rake routes

答案 2 :(得分:0)

我必须提到在路由中创建资源的想法是使用RESTful路由并让Rails推断URL而不是在表单语句中强制URL。来自APIdock:http://apidock.com/rails/ActionView/Helpers/FormHelper/form_for

  

然而,如果传递给form_for的记录是资源,则它可以进一步简化,即它对应于一组RESTful路由,例如,使用config / routes.rb中的resources方法定义。在这种情况下,Rails将简单地从记录本身推断出适当的URL。

为什么不尝试完全删除URL语句并信任您的路由?

关于提到的nil错误,我认为这个参数

params[:application_status]

正在剥离其余的哈希变量,因此当它们到达控制器时它们会丢失。