form_for in rails 中使用实例变量时如何发送参数

How are parameters sent when I use instance variables in form_for in rails

我对如何通过 form_for 在 rails 中将参数发送到控制器感到有点困惑。我阅读了 https://guides.rubyonrails.org/form_helpers.html 中的 dealing with model objects 部分并试图理解一点,但它对我没有太大帮助。 基本上我有如下表格

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

相应的控制器访问参数为params[:missed_call_flow][:action_id]

我的问题是,当表格中的任何地方都没有提到时,params[:missed_call_flow] 是从哪里开始发挥作用的。 我从文档中了解到,当实例变量以形式给出时,例如这里是 @flow,参数可以作为 params[:flow] 访问。 那为什么在这段代码中是 [:missed_call_flow] 而不是 [:flow] 呢?这也是因为controller名称为MissedCallFlowController的访问方式之一吗?

这是我试图为我的项目理解的示例应用程序,编写代码的人目前不在,因此将其张贴在这里寻求帮助。如果我的问题缺少任何细节,请告诉我。

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

开头

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

作为编程中的概括,变量名不应影响程序的运行。您已将变量命名为 @flow 的事实会被程序的内部工作忽略。程序员可以方便地命名变量。

我想知道您是否没有看到您期望的模型名称,因为 missed_call_flow 表示两个其他 table 之间的连接 table,模型名称为 missed_callflow。您可能错误地将此 MissedCallFlow class 的实例分配给了变量 @flow