2015-04-27 55 views
0

在我的Rails应用程序我有这个路线嵌套路线错误的Rails

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

而且我在job_application控制器的方法称为change_stage 其实,我试图改变job_application的一个PARAMS在模式所以为了这个,我有这样的模式身体

<%=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

您应该使用change_stage_job_job_application_path(不点在结束)。

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

+0

什么,现在我得到这个错误是没有路由匹配{:动作=> “change_stage”:控制器=> “job_applications”:ID =>零,:JOB_ID =>零,:区域= >:en}缺少必需的键:[:id,:job_id] – rocki

+1

绝对运行'rake routes',并确切地看到你需要用你的帮助器传递给控制器​​的参数。但从我所看到的,我非常肯定你需要传递'job_application'和'job'实例变量。你不需要传递'application_status',因为你可以通过控制器上的params散列获得这个值。 – josethernandezc

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语句并相信您的路由?

关于提到的零错误,我觉得这个参数

params[:application_status] 

被剥你的哈希其余瓦尔使他们错过当它到达控制器。

1

1)删除后的URL名称URL的名字,而params

2)串联_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| %>