Ruby on rails 在rails中使用表单_中的实例变量时,参数是如何发送的

Ruby on rails 在rails中使用表单_中的实例变量时,参数是如何发送的,ruby-on-rails,form-for,form-helpers,Ruby On Rails,Form For,Form Helpers,我对参数是如何通过rails中的表单_发送到控制器有点困惑。我阅读了中的“处理模型对象”一节,试图了解一些内容,但这对我帮助不大。 基本上我有一个如下的表格 <%= form_for @flow, url: '/create_flow' do |f| %> <%= f.hidden_field :action_id, value: @selected_action.id %> <table class="table table-striped table-b

我对参数是如何通过rails中的表单_发送到控制器有点困惑。我阅读了中的“处理模型对象”一节,试图了解一些内容,但这对我帮助不大。 基本上我有一个如下的表格

<%= form_for @flow, url: '/create_flow' do |f| %>
  <%= f.hidden_field :action_id, value: @selected_action.id %>
  <table class="table table-striped table-bordered table-hover">
    <tr>
      <th>Flow name</th>
      <th>URL</th>
    </tr>
    <% @selected_action.missed_call_flows.each do |flow| %>
      <tr>
        <td><%= flow.name %></td>
        <td><code><%= flow.url %></code></td>
      </tr>
    <% end %>
    <tr class="form-group">
      <td>
        <%= f.text_field :name, class: "form-control", placeholder: "Add a new flow ...", required: true %>
      </td>
      <td>
        <button type="submit" class="btn btn-primary">Generate URL</button>
      <td>
    </tr>
  </table>
<% end %>
<% end %>

流名称
统一资源定位地址
生成URL
相应的控制器正在以
params[:missed\u call\u flow][:action\u id]

我的问题是,
params[:missed_call_flow]
在表单中的任何地方都没有提到时,它在哪里起作用。 我从文档中了解到,当实例变量以表单形式给出时,例如这里的
@flow
,可以通过
params[:flow]
访问参数。 那么为什么在这段代码中它是[:missed_call_flow]而不是[:flow]?由于控制器名称为MissedCallFlowController,这也是访问的方式之一吗


这是一个示例应用程序,我正试图了解我的项目,而编写代码的人目前不可用,因此将其发布到此处以寻求帮助。如果我的问题缺少任何细节,请告诉我

用于辅助对象的
表单\u从模型对象创建表单。如果您以传统方式设置Rails应用程序,您将(看起来)拥有一个名为
app/models/missed_call\u flow.rb的文件,该文件的开头是定义
class MissedCallFlow

此文件定义了模型。它是
params[:missed_call_flow]
name的来源,因为Rails习惯为模型命名此数据结构

作为编程中的泛化,变量名不应影响程序的功能。将变量命名为
@flow
的事实被程序的内部工作忽略。程序员可以根据自己的需要命名变量,这是一种方便


我想知道您是否没有看到预期的模型名称,因为
missed\u call\u flow
表示两个其他表之间的联接表,其中的模型名为
missed\u call
flow
。您可能错误地将此MissedCallFlow类的实例分配给变量
@flow

这是整个表单吗?在我看来,可能还有一个额外的
。也许您的
@flow
MissedCallFlow
的一个实例,而不是
flow
。简言之,您可以使用任何名称命名实例变量,但是
form\u for
使用要传递的对象的
class
。是的,我有一个模型名为MissedCallFlow。但是rails如何知道
@flow
是MissedCallFlow的一个实例,而不是任何其他模型?是因为它的位置,也就是说,是因为
@flow
还是该表单是在MissedCallFlow控制器中创建的,因此它假设
@flow
属于MissedCallFlow模型?不,这不是一个假设。您会发现变量
@flow
被设置在某个地方,可能在控制器文件中。它可能是这样的:
@flow=MissedCallFlow.new
aah!明白了,是的,控制器已经设定好了。非常感谢你的详细回答。