ruby 将表单绑定到对象:在这种情况下,“范围”是什么意思?

o3imoua4  于 12个月前  发布在  Ruby
关注(0)|答案(1)|浏览(90)

在Ruby on Rails中:
“将窗体绑定到对象
form_with的:model参数允许我们将表单生成器对象绑定到模型对象。这意味着表单将作用域为该模型对象,表单的字段将填充来自该模型对象的值。
来源:文章

在所描述的上下文中,“范围”是什么意思?

我知道“scope”是一个区域,其中特定的变量/常量是可见的,分别可访问的。我不确定,这意味着什么。

rur96b6h

rur96b6h1#

你需要阅读下面的文字,该指南
以下形式:

<%= 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"
表单操作的URI根据文章ID自动填充:action="/articles/42"
表单字段值与模型示例属性Map:value="My Title"<textarea ...>My Body</textarea>
Form还检查模型示例是否持久。根据此事实,选择表单方法(POST或PATCH)和提交默认值(创建或更新
你不需要明确地写出来。只需为表单使用:model键,并将属性名称传递给表单输入助手
总之,在此上下文中,“scoped”意味着表单与给定的模型对象紧密集成,并且它以直接绑定到模型属性的方式操作,使用特定的键使表单参数无效

相关问题