来自 Ruby on Rails 指南:
“将表单绑定到对象
form_with 的 :model 参数允许我们将表单构建器对象绑定到模型对象。这意味着表单将在该模型对象的范围内,并且表单的字段将填充来自该模型对象的值。” 来源:
文章在所描述的上下文中“范围”是什么意思?我知道“范围”是一个区域,其中特定的变量/常量是可见的,分别是可访问的。我不确定这里是什么意思。
以下表格:
<%= form_with model: @article do |form| %> <%= form.text_field :title %> <%= form.text_area :body, size: "60x10" %> <%= form.submit %> <% end %>
输出:
<form action="/articles/42" method="post" accept-charset="UTF-8" > <input name="authenticity_token" type="hidden" value="..." /> <input type="text" name="article[title]" id="article_title" value="My Title" /> <textarea name="article[body]" id="article_body" cols="60" rows="10"> My Body </textarea> <input type="submit" name="commit" value="Update Article" data-disable-with="Update Article"> </form>
这里有几点需要注意:
表单操作会自动填充适当的
如您所见,所有字段名称的范围均为- 表单字段会自动填充来自
@article
值。
- 表单字段名称的范围为
@article
的相应值。
- 提交按钮会自动给出适当的文本值。
article[...]
。这意味着
将是包含所有这些字段值的哈希。您可以在本指南的了解参数命名约定一章中详细了解输入名称的重要性。params[:article]
name="article[title]"
、
name="article[body]"
等。这意味着在后端参数将使用键 article: { title: "My Title", body: "My Body" }
HTML id 的范围也包含模型名称:id="article_title"
、
id="article_body"
等。表单字段值与模型实例属性映射:value="My Title"
、
<textarea ...>My Body</textarea>
等你不需要明确地写它。只需在表单中使用 :model
键并将属性名称传递给表单输入助手