带有自定义rails的额外字段构建构建器

时间:2010-01-21 18:15:42

标签: ruby-on-rails ruby forms

我有一个自定义表单构建器,这个自定义构建器的原因之一是,对于每个表单,我需要包含一些额外的参数,我不想在每种形式中明确地使用隐藏的字段标记写。

for_for(@foo, :builder => MyBuilder) do |f|
  # stuff I shouldn't have to worry about
  # this should be put in all the time without me having to do it
  hidden_field_tag('extra', 'myextrainfo')

  # normal things I would put in
  f.text_field(:bar)
end

我在自定义表单构建器中需要做什么,或者我可以覆盖什么或方法链以在表单中添加一些额外的隐藏内容(不添加URL参数)?

1 个答案:

答案 0 :(得分:5)

这有点棘手(Ruby / Rails的合理新功能),但我找到了解决方案。将它放在一些帮助文件中(或根据您的需要在其他位置)。

module ActionView::Helpers::FormHelper
  def form_for_with_updated_code(record_or_name_or_array, *args, &proc)
    form_for_without_updated_code(record_or_name_or_array, *args) { |f|
       concat(hidden_field_tag('extra','info'))
       proc.call(f)
    }
  end
  alias_method_chain :form_for, :updated_code
end

它会覆盖form_for方法并添加隐藏字段。您可以使用*argsextract_options!参数中为额外的个人选项添加代码,例如填充隐藏字段。