2015-04-27 11 views
0

В моем приложении рельсов У меня есть это маршрутыВложенных маршрутов ошибки в Rails

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

И у меня есть метод, называемый change_stage в моем контроллере job_application На самом деле я пытаюсь изменить один Params на 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

Вы должны использовать change_stage_job_job_application_path (без точки в конце).

FYI: Будет лучше проверить использование имени хелпера URL-адресов Rails rake routes для любого случая.

+0

Что я получаю сейчас эта ошибка нет маршрута матчей {: действие => "change_stage",: контроллер => "job_applications",: идентификатор => ноль,: job_id => ноль,: локаль = >: ru} отсутствуют необходимые ключи: [: 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. В этом случае Rails просто выведет соответствующий URL из самой записи.

Почему бы не попробовать полностью удалить URL-адрес и не доверять своим маршрутам?

О нулевой ошибке упоминалась, я думаю, что этот параметр

params[:application_status] 

лишает остальную часть вашей хэш-вары, чтобы они пропали без вести, когда он попадет в контроллер.

1

1) Удалите точку между именем URL-адреса и Params

2) Объединить _path после имени URL.

3) Поскольку это метод-член для вложенных маршрутов, передайте оба задания параметров и job_application.

<%=form_for :job_application, :url => change_stage_job_job_application_path(@job, @job_application), :html => {:method => :post, :class => 'form- horizontal' } do |f| %> 
Смежные вопросы