【发布时间】:2019-08-16 14:18:05
【问题描述】:
我对如何通过 rails 中的 form_for 将参数发送到控制器感到有些困惑。我阅读了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] ?这也是因为控制器名称是 MissedCallFlowController 的一种访问方式吗?
这是一个示例应用程序,我正在尝试为我的项目了解它,而编写代码的人目前不可用,因此在此处发布以寻求帮助。如果我的问题缺少任何细节,请告诉我。
【问题讨论】:
-
这是整个表格吗?在我看来,可能会有一个额外的
<% end %>。 -
也许您的
@flow是MissedCallFlow的一个实例,而不是Flow。简而言之,您可以使用您使用的任何名称来命名您的实例变量,但form_for使用您正在传递的对象的class。
标签: ruby-on-rails form-for form-helpers