Ruby on rails FormHelper::label和FormTagHelper::label\u标记之间有什么区别?

Ruby on rails FormHelper::label和FormTagHelper::label\u标记之间有什么区别?,ruby-on-rails,Ruby On Rails,我正在写一个表单,它处理多个模型。一些关于如何使用的例子,还有一些用法,我真的不理解其中的区别 在我的特殊情况下,两者似乎产生相同的输出: <% form_for :post, :url => { :action => 'create' } do %> <p> <%= label_tag 'post_type' %><br /> <%= text_field :post, :post_type %>

我正在写一个表单,它处理多个模型。一些关于如何使用的例子,还有一些用法,我真的不理解其中的区别

在我的特殊情况下,两者似乎产生相同的输出:

<% 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>
  ...
{:action=>'create'}do%>



...
呈现:

  <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>

帖子类型

家长帖子


label助手似乎更有用,因为它可能还可以做一些额外的事情,因为它知道它所标记的模型和属性,但我找不到任何支持它的东西。两者之间有实际区别吗?什么时候应该使用一个帮助程序而不是另一个?

Rails提供了两种类型的表单帮助程序:专门用于模型属性的帮助程序和不用于模型属性的帮助程序。*_标记帮助器用于创建不依赖分配给模板的活动记录对象的表单标记


尽管如您所示,
标签
元素的生成标记没有区别,在您的情况下,您应该使用
标签
表单帮助程序,以与您对其他表单帮助程序的使用保持一致,因为它会自动将
for
属性设置为关联文本字段元素的正确ID。

当您在使用
form\u for(…)创建的表单对象中时,请使用
f.label
执行| f |
并希望引用模型属性。如果您的应用程序是i18n-ed,Rails将使用转换来显示属性名称

当您不在表单对象中时,请使用
label\u tag
。(或者您在表单对象中,但希望为非模型属性创建虚拟标签。)

所有表单输入都有这两种变体,有和没有
\u标记
后缀,如
选择
选择标记
,等等