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

我正在写一个处理多个模型的表单。 一些如何执行此操作的示例使用ActionView :: Helpers :: FormHelper :: label ,有些使用ActionView :: Helpers :: FormTagHelper :: label_tag ,我真的不明白其中的区别。

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

 { :action => 'create' } do %> 



...

呈现:

  



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

Rails提供了两种类型的表单助手:那些专门用于模型属性的表单助手和那些不具有模型属性的表单助手。 * _tag帮助程序用于创建不依赖于分配给模板的Active Record对象的表单标记。

虽然您所显示的label元素的生成标记没有区别,但在您的情况下,您应该使用label表单帮助程序与您对其他表单帮助程序的使用一致,并且因为它会自动将for属性设置为正确相关文本字段元素的ID。

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

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

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