FormHelper::label和FormTagHelper::label_tag有什么区别?

9
我正在编写一个处理多个模型的表单。一些关于如何实现这个功能的示例使用ActionView::Helpers::FormHelper::label,而另一些则使用ActionView::Helpers::FormTagHelper::label_tag,我不太理解它们之间的区别。
在我的特定情况下,两者似乎产生相同的输出:
<% form_for :post, :url => { :action => 'create' } do %>
  <p>
    <%= label_tag 'post_type' %><br />
    <%= text_field :post, :post_type %>
  </p>
  <p>
    <%= label :post, :parent_post_id %><br />
    <%= text_field :post, :parent_post_id %>
  </p>
  ...

渲染:

  <p>
    <label for="post_type">Post type</label><br />
    <input id="post_post_type" name="post[post_type]" size="30" type="text" />
  </p>
  <p>
    <label for="post_parent_post_id">Parent post</label><br />
    <input id="post_parent_post_id" name="post[parent_post_id]" size="30" type="text" />
  </p>
2个回答

12

Rails提供了两种类型的表单助手:一种专门用于处理模型属性,另一种不需要。*_tag助手用于创建不依赖于Active Record对象分配给模板的表单标签。

虽然对于label元素的生成标记没有差异,但在您的情况下,应该使用


2
当您在使用 `form_for(...) do |f|` 创建的表单对象中并且想要引用模型属性时,请使用 `f.label`。如果您的应用已经国际化,Rails 将使用翻译来显示属性名称。
当您不在表单对象中时,请使用 `label_tag`。(或者您在表单对象中但是想要为非模型属性创建一个虚拟标签。)
所有表单输入都有这两种变体,带和不带 `_tag` 后缀,例如 `select` 和 `select_tag` 等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接