class CustomFormBuilder < ActionView::Helpers::FormBuilder
def submit(value, options = {})
@template.hidden_field_tag(options.delete(:custom_param)) + super
end
end
module CustomParamFormPatch
private
def extra_tags_for_form(html_options)
hidden_field_tag(html_options.delete('custom_param')) +
super
end
end
ActionView::Base.prepend(CustomParamFormPatch)
1 回答
编辑:好的,我的第一次传递没有在初始化程序中定义一个值,您稍后将从控制器传入 . 所以你可以采用以下两种方式之一 . 你可以定义一个
CustomFormBuilder
类 - 把它放在初始化器中 -然后将
:builder
选项传递给form_for
并假设您在表单中调用
submit(value, options)
,其中options包含您的custom_param,它将被自定义方法覆盖,该方法会使用您想要的值插入隐藏字段 .另一种方法是猴子补丁猴子补丁FormTagHelper:
这是调整代码
form_for
用于在每个表单的顶部插入真实性标记 . 现在,您可以在将其设置为控制器中的实例变量后将该自定义参数传递给form_for
:如果您使用的是Ruby 2.0,则可以使用模块前置而不是弃用的alias_method_chain,例如