我有一个自定义表单构建器,这个自定义构建器的原因之一是,对于每个表单,我需要包含一些额外的参数,我不想在每种形式中明确地使用隐藏的字段标记写。
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参数)?
答案 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方法并添加隐藏字段。您可以使用*args
从extract_options!
参数中为额外的个人选项添加代码,例如填充隐藏字段。