我很难理解form_with的工作原理。为了了解form_with的最基本用法,我正在研究Rails如何在rails g脚手架过程中进行设置。
我创建了一个设备支架,并在其中研究了如何在_form.html.erb文件中设置表单。
<%= form_with(model: equipment, local: true) do |form| %>
<div class="container">
<div class="row">
<div class="col col-lg-10 col-offset-left-1">
<div class="form-group">
<%= form.label :name %><br />
<%= form.text_field :name, placeholder: "equipment name", class: "form-control" %>
</div>
</div>
</div>
</div>
</div>
<div class="actions">
<%= form.submit %>
</div>
<% end %>
原来,我仍然很困惑表单如何知道该表单应该创建新设备还是编辑现有设备?表单仅指定模型,但找不到指定方法的位置。
有人可以指出我正确的方向吗?谢谢
答案 0 :(得分:3)
指定模型就足够了,因为方法form_with
可以检查模型(已保存)是否将发送补丁请求,或者模型是新模型(因此将发送后期请求)。
活动记录已经具有一些功能可用于了解记录是新记录还是持久记录
equipment.new_record? # returns true when the model is new and false if saved
equipment. persisted? # returns false when the model is new and true if saved
此处的rails源代码显示
https://github.com/rails/rails/blob/c87f6841b77e5827ca7bd03a629e2d615fae0d06/actionview/lib/action_view/helpers/form_helper.rb#L1530
该方法还可以通过类似于path_for
答案 1 :(得分:1)
您的代码块:
<%= form_with(model: equipment, local: true) do |form| %>
<div class="container">
<div class="row">
<div class="col col-lg-10 col-offset-left-1">
<div class="form-group">
<%= form.label :name %><br />
<%= form.text_field :name, placeholder: "equipment name", class: "form-control" %>
</div>
</div>
</div>
</div>
</div>
<div class="actions">
<%= form.submit %>
</div>
<% end %>
将呈现如下内容:
<form action=”/equipments” accept-charset=”UTF-8" method=”post” data-remote=”true”>
<input name=”utf8" type=”hidden” value=”✓”>
<input type=”hidden” name=”authenticity_token” value=”…”>
<input type=”text” name=”post[name]”>
<input type=”submit” name=”commit” value=”Create” data-disable-with=”Create”>
</form>
现在,form_with
视图助手使用该URL来了解model
是什么值,并相应地呈现表单。
DHH发表了issue,解释了引入form_with
的原因