2010-01-21 70 views
6

我有一个自定义窗体生成器,这个自定义生成器的原因之一是,对于每个窗体,我需要包括一些额外的参数,我不想明确地与隐藏的字段标签在我写的每一种形式。额外的字段与定制轨道窗体生成器

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 

我有什么在我的自定义表单生成器做,或者我有什么可以重写或方法链在窗体中添加一些额外的隐情(不只是添加网址参数)?

回答

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方法并添加隐藏字段。您可以将代码添加到额外的个人选项中,例如使用extract_options!*args参数填充隐藏字段。

+0

非常好。充满胜利。谢谢! – 2010-01-22 00:13:02