【问题标题】:What is the difference between FormHelper::label and FormTagHelper::label_tag?FormHelper::label 和 FormTagHelper::label_tag 有什么区别?
【发布时间】:2009-06-18 04:31:45
【问题描述】:

我正在编写一个处理多个模型的表单。如何做到这一点的一些例子使用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>

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

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      当您在使用form_for(...) do |f| 创建的表单对象中并想要引用模型属性时,请使用f.label。如果你的应用是 i18n-ed,Rails 将使用翻译来显示属性名称。

      当您不在表单对象中时使用label_tag。 (或者您在表单对象中,但想为非模型属性创建一个虚拟标签。)

      所有表单输入都有这两种变体,有和没有_tag 后缀,如selectselect_tag

      【讨论】:

        猜你喜欢
        • 2013-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-13
        • 2020-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多