在我的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>
我的表格有什么问题
答案 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]
正在剥离其余的哈希变量,因此当它们到达控制器时它们会丢失。