SubmitOnce

Prevent from submitting form twice for Rails.

Scenario: when user wanna add a post, usually go to new page first, input some information and submit, it will redirect to success page if these is no error. However after all if user click backward button on browser, it will render history page(the new page before), user could submit same form again.

SubmitOnce gem resolve this problem. Form could be submitted only browser fetch a new fresh one.

Installation

Add this line to your application's Gemfile:

gem 'submit_once'

Usage

posts/new.html.erb

<%= form_for @post do |f| %>
  <!-- token tag here -->
  <%= form_token_tag %>

  <%= f.text_field :title %>
  ...
  <%= f.submit %>
<% end %>

posts_controller.rb

class PostsController < ApplicationController
  # return to root_url when form submit again
  before_action :check_form_token!, only: [:create]

  # OR custom before action 
  # before_action :custom_check_form_token

  def index
  end

  def new
  end

  def create
    ...
  end

  private
  def custom_check_form_token
    # using `check_form_token`
    unless check_form_token
      redirect_to posts_url, alert: 'Invalid form token'
    end
  end
end

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/submit_once. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

The gem is available as open source under the terms of the MIT License.