8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

simple_form にて disable_with: をデフォルトで設定したい

Last updated at Posted at 2014-09-03

背景

フォームの二重送信、できるだけ避けたいですよね。

rails では submit ボタンに data: {disable_with: "送信中..."} というオプションを指定してやることによって、二重送信を防ぐことができます。

= simple_form_for(...) do |f|
  ...
  = f.submit class: "btn btn-primary", data: {disable_with: "送信中..."}

そうすると submit 時はこんな感じに非活性になってくれます。

スクリーンショット 2014-09-03 19.47.37.png

これで二重送信が防げます。やったね。

問題

もちろん、全ての submit ボタンに対してオプション指定なんかはしたくないので、デフォルトで用意してあげたいですね。

実装例

SimpleForm::FormBuilder をオープンしてエイリアスメソッドを定義してあげます。

config/initializers/simple_form.rb
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: '送信中...' }
    options[:data] = data_disable_with.merge(options[:data] || {})
    submit_without_override(value, options)
  end
  alias_method_chain :submit, :override
end

文言を変えたい場合は、通常通りオプション指定してやるとデフォルト文言を上書きできます。

= simple_form_for(...) do |f|
  ...
  = f.submit class: "btn btn-primary", data: {disable_with: "アップロード中..."}
8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?