0

Мне нужно создать форму, которая отправляет два скрытых поля контроллеру. Форма не привязана к какому-либо конкретному объекту, мне просто нужно получить входные данные для контроллера. Вот мой взгляд код:Rails - невозможно подключить форму к действию контроллера

<%= form_tag(controller: "projects", action: "change_state_from_posting_to_actual_job") do |f| %> 
     <div><%= f.hidden_field_tag :relationship_id, value: relationship.id %></div> 
     <div><%= f.hidden_field_tag :project_id, value: project.id %></div> 
     <%= f.submit "Apply", class: "btn btn-large btn-primary" %> 
<% end %> 

Я получаю сообщение об ошибке:

No route matches {:action=>"change_state_from_posting_to_actual_job", :controller=>"projects"} 

Но я, безусловно, есть контроллер и действие с этими именами (Контроллер на самом деле projects_controller, но я пробовал Я также попробовал ProjectController).

Вот мой маршрут:

get 'change_state', to: 'projects#change_state_from_posting_to_actual_job', as: :change_state 

Как получить форму, чтобы перейти к контроллеру?

+0

У вас есть маршрут в вашем 'конфигурации/routes.rb 'который отображает это действие? – Almaron

+0

да, я отправлю маршрут сейчас – Philip7899

+0

, то почему бы вам просто не использовать 'change_state_path' в вашей' form_tag'? – Almaron

ответ

0

Ваш маршрут просто /change_state. Удалите controller и укажите маршрут.

form_tag('/change_state') do |f| 

Вы упускаете id компонент вашего маршрута (при условии, change_state работает над конкретным проектом).

Либо использовать form_for вместо form_tag ...

form_for [project, :change_state] do |f| 

или поставить id компонент ваших form_tag вариантов URL:

form_tag(id: project.id, controller: 'projects', action: 'change_state') do |f| 
+0

Я не могу сделать его формой для проекта, потому что ichange_state не работает на конкретный проект. – Philip7899

+0

Тогда есть несколько проблем с вашими маршрутами, как техническими, так и логичными. Техническое: Rails не считает, что вы определили маршрут; покажите нам свои маршруты (отредактируйте соответствующие вопросы в своем вопросе) и логично: почему вы передаете скрытый 'project_id' методу в контроллере проектов, если этот метод не работает в конкретном проекте? Ваша форма явно что-то делает в конкретном проекте *, поэтому почему этот маршрут не подключен, чтобы поддержать это? – meagar

+0

Хмм, я понимаю, что вы говорите. Эта форма предназначена для части стажировки, где работодатель может принять заявителя. Мне нужен этот контроллер, чтобы изменить две вещи: столбец «состояние» в таблице «проекты» и столбец «состояние» в таблице «отношения». Я попробовал ваши предложения. Второе предложение вернуло ошибку: «Синтаксическая ошибка, неожиданный tLABEL, ожидающий»). ... t_buffer.append = form_tag (id: project.id, controller: 'pro ...'.Первое предложение вернуло ошибку: «undefined method» project_change_state_from_posting_to_actual_job_path » – Philip7899

Смежные вопросы