Я хочу изменить поведение по умолчанию моей кнопки отправки в simple_form, так что мне не нужно явно указывать: disable_with = > true для всех моих форм. Как я могу сделать это конкретное изменение в simple_form.rb?
По умолчанию disable_with для simple_form submit
Ответ 1
Это немного отличается в новых версиях 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 за идею!
Ответ 2
Добавление этого переопределения в мой 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
Ответ 3
В соответствии с ActionView:: Helpers:: FormBuilder.submit, f.button accespts 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
Надеюсь, что это поможет.
Ответ 4
Он не отменил никаких существующих атрибутов данных на кнопке отправки, которая совместима с 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)
