Ruby on rails 轨道-can';t将窗体连接到控制器操作

Ruby on rails 轨道-can';t将窗体连接到控制器操作,ruby-on-rails,forms,model-view-controller,ruby-on-rails-4,form-helpers,Ruby On Rails,Forms,Model View Controller,Ruby On Rails 4,Form Helpers,我需要制作一个表单,将两个隐藏字段发送给控制器。表单没有绑定到任何特定对象,我只需要获取控制器的输入。以下是我的查看代码: <%= form_tag(controller: "projects", action: "change_state_from_posting_to_actual_job") do |f| %> <div><%= f.hidden_field_tag :relationship_id, value: relationship.id

我需要制作一个表单,将两个隐藏字段发送给控制器。表单没有绑定到任何特定对象,我只需要获取控制器的输入。以下是我的查看代码:

<%= 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 %>
但我肯定有一个控制器和一个具有这些名称的操作(控制器实际上是projects\u controller,但我已经试过了。我也试过projects controller)

这是我的路线:

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

如何将表单发送到控制器?

您的路线只是
/change\u state
。移除
控制器
,只需指定路线即可

form_tag('/change_state') do |f|

您缺少路线的
id
组件(假设
change\u state
在特定项目上运行)

使用
form\u作为
而不是
form\u标签

form_for [project, :change_state] do |f|
或者提供
表单标签的
id
组件
URL选项:

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

我不能把它做成项目的表格,因为ichange_州没有具体的项目。然后你的路线有一些问题,包括技术和逻辑上的问题。技术:Rails认为您没有定义路线;向我们展示您的路线(将相关路线编辑到您的问题中)和逻辑:如果隐藏的
项目id
不适用于特定项目,为什么要将该方法传递给项目控制器中的方法?你的表单显然对一个特定的项目做了一些事情,那么,为什么路线没有连接起来来支持它呢?嗯,我明白你的意思了。本表格适用于雇主可以接受申请人的实习场所。我需要这个控制器改变两件事,“项目”表中的“状态”列和“关系”表中的“状态”列。我试过你的建议。第二个建议返回了错误:“语法错误,意外的tLABEL,应为’”…t_buffer.append=form_标记(id:project.id,controller:'pro…'。第一个建议返回了错误:“未定义的方法”“项目”“更改”“状态”“从发布到实际作业路径”“我想你是对的,它可能应该针对特定的项目。出于某种原因,我无法让它工作。表单位于遍历@projects的each循环中。循环说“@projects.each do | project |”但由于某种原因,当我为project创建“form|u”时,它会显示未定义的方法,尽管我知道project是定义的,因为它正在经历循环。当我为[project]创建“form|u”时,将“state|u”从“posting|u”更改为“reactive|job”]'我得到一个错误:'Symbol:Class'的未定义方法'model_name'你在
config/routes.rb
中有映射到该操作的路由吗?是的,我现在就发布该路由,那么你为什么不在
表单标记中使用
change_state_path
?顺便说一句,你真的不需要表单生成器对象
f
,因为您没有与表单关联的实际对象。因此我希望删除该对象。我尝试了该操作,但随后出现错误:“没有与[POST]匹配的路由”/projects/show_applicators”。
form_tag(id: project.id, controller: 'projects', action: 'change_state') do |f|