simple_form提交的默认disable_with

时间:2012-07-05 08:50:01

标签: ruby-on-rails simple-form

我想在simple_form中更改提交按钮的默认行为,这样我就不需要明确指定:disable_with =>适用于我的所有表格。如何在simple_form.rb中进行此特定更改?

4 个答案:

答案 0 :(得分:5)

这在较新版本的Rails中略有不同,因为不建议使用属性disable_with。我写了一篇文章:http://www.railsonmaui.com/blog/2014/02/23/simple-form-and-disable-processing-by-default/

这是新代码:

SimpleForm::FormBuilder.class_eval do
  def submit_with_override(field, options = {})
    data_disable_with = { disable_with: 'Processing...' }
    options[:data] = data_disable_with.merge(options[:data] || {})
    submit_without_override(field, options)
  end
  alias_method_chain :submit, :override
end

感谢@Appster的想法!

答案 1 :(得分:3)

将此覆盖添加到我的simple_form.rb就像一个魅力!

SimpleForm::FormBuilder.class_eval do
  def submit_with_override(field, options = {})
    submit_without_override(field, {:disable_with => 'saving...'}.merge(options))
  end
  alias_method_chain :submit, :override
end

答案 2 :(得分:2)

根据ActionView::Helpers::FormBuilder.submitf.button访问1~2个参数,因此以下两个代码都应该有效。

  • f.submit "MyText", class: "my-btn"
  • f.submit class: "my-btn"

在我的情况下,添加此代码以初始化文件工作正常。

SimpleForm::FormBuilder.class_eval do
  def submit_with_override(value=nil, options={})
    value, options = nil, value if value.is_a?(Hash)
    data_disable_with = { disable_with: 'Processing...' }
    options[:data] = data_disable_with.merge(options[:data] || {})
    submit_without_override(value, options)
  end
  alias_method_chain :submit, :override
end

希望它有所帮助。

答案 3 :(得分:0)

它没有覆盖与Rails 5兼容的提交按钮上的任何现有数据属性。

module DisableDoubleClickOnSimpleForms
  def submit(field, options = {})
    if field.is_a?(Hash)
      field[:data] ||= {}
      field[:data][:disable_with] ||= field[:value] || 'Processing...'
    else
      options[:data] ||= {}
      options[:data][:disable_with] ||= options[:value] || 'Processing...'
    end
    super(field, options)
  end
end

SimpleForm::FormBuilder.prepend(DisableDoubleClickOnSimpleForms)