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_call
和 flow
。您可能错误地将此 MissedCallFlow class 的实例分配给了变量 @flow
。
我对如何通过 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_call
和 flow
。您可能错误地将此 MissedCallFlow class 的实例分配给了变量 @flow
。