如果设置了特定选项,如何在表单标签中添加“required”?

时间:2009-08-13 11:05:57

标签: ruby-on-rails

如果我在<span class='req'>&bull;</span>表单助手上设置了一个选项,我想在我的视图中的<label>标记中添加:label。即。

<%= f.label :address_1, "Address 2:", :req => true -%>

应该产生:

<label for="model_address_1"><span class='req'>&bull;</span> Address 1:</label>

而不是:

<label for="model_address_1" req="true">Address 1:</label>

像现在一样。我意识到我可能必须覆盖默认的表单构建器或创建我自己的表单构建器,但不知道如何执行此操作。有什么建议?提前谢谢!

更新:我这样做是为了试图干掉我的代码,我意识到我可以将上面的span代码段粘贴到我所有代码中的所有标签中观点,但我想避免这种情况。

2 个答案:

答案 0 :(得分:2)

这是未经测试的,但这些方面的内容应该有效。

# in lib/labeled_form_builder.rb
class LabeledFormBuilder < ActionView::Helpers::FormBuilder
  def label(field_name, label = nil, options = {})
    if options.delete(:req)
      label ||= field_name.to_s.humanize
      label = @template.content_tag(:span, "&bull;", :class => "req") + " " + label
    end
    super(field_name, label, options)
  end
end

然后在您的视图中使用该构建器

<%= form_for @item, :builder => LabeledFormBuilder do |f| %>

您可能对我Mastering Rails Forms screencast series的第3集感兴趣,我会详细介绍如何创建表单构建器。

答案 1 :(得分:0)

为了让它在Rails 3中运行而对ryanb进行微小的改动3.你只需告诉content_tag不要逃避子弹。

class LabeledFormBuilder < ActionView::Helpers::FormBuilder
  def label(field_name, options = {}, label = nil)
    if options.delete(:req)
      label ||= field_name.to_s.humanize
      label = @template.content_tag(:span, "&bull;", {:class => "req"}, false) + " " + label
    end
    super(field_name, label, options)
  end
end