【问题标题】:Rails: Overwrite Form Builder's button method?Rails:覆盖表单生成器的按钮方法?
【发布时间】:2013-03-31 20:17:09
【问题描述】:

当我使用 form_for 中的表单生成器生成一个按钮(使用 f.button)时,它会生成一个标题为“”的按钮。我想要做的是为这个标题添加一个前缀:“MyPrefix”。 所以基本上我需要做的就是覆盖按钮方法(https://github.com/rails/rails/blob/488699166c3558963fa82d4689a35f8c3fd93f47/actionpack/lib/action_view/helpers/form_helper.rb#L1402)。但是我该怎么做呢?

谢谢!

【问题讨论】:

  • 这是您要找的吗? f.button "", :title => "MyPrefix" 或者你想让f.button 生成

标签: ruby-on-rails form-for


【解决方案1】:

您可以使用Custom Form Builder 来执行此操作(在该页面上搜索“自定义表单构建器”)。

代码大致如下(您必须决定前缀的确切位置):

class PrefixedFormBuilder < ActionView::Helpers::FormBuilder
   def button(value=nil)
      super(value, :title => 'MyPrefix')
   end
end

在 ApplicationHelper 中使用自定义助手:

def prefixed_form_for(record, *args, &block)
   options = args.extract_options!
   options.merge!(:builder => PrefixedFormBuilder)
   form_for(record, *(args + [options]), &block)
end

然后使用:

prefixed_form_for(@model) do |f|

在你看来。

【讨论】:

  • 听起来很有希望。但是我必须在哪里放置该代码以及如何确保使用我的自定义代码而不是标准代码?
  • prefixed_form_for... 对我不起作用;但是 form_for @model, :builder => PrefixedFormBuilder 确实有效!所以感谢您的帮助!
  • ...如果您将其添加到您的 environment.rb: ActionView::Base.default_form_builder = PrefixedFormBuilder ..那么您无需更改表单中的任何内容!
  • 在您的情况下听起来像是一个很好的解决方案。我忘了你必须为prefixed_form_for 定义帮助器,我会添加它的代码,以防以后有人遇到答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
相关资源
最近更新 更多