Gem Repost implements Redirect using POST method.

Implementation story and some details in the following article Redirect using POST in Rails.

Gem Version Build Status


Add this line to your application’s Gemfile:

gem 'repost'

And then execute:

$ bundle

Or install it yourself as:

$ gem install repost

What problem does it solve?

When you need to send some parameters to an endpoint which should redirect you after execution. There wouldn’t be a problem if an endpoint receives [GET], because you can just use:

redirect_to entity_url(id:, token: model.token...)

But when an endpoint receives [POST], you have to generate html form and submit it. So repost gem helps to avoid creation of additional view with html form, just use redirect_post method instead. I faced with this problem when was dealing with bank transactions. You can see the approximate scheme:


If you use Rails, gem automatically includes helper methods to your controllers:


and, as an alias


Under the hood it calls render method of current controller with html:.

Example in Rails app:

class MyController < ApplicationController
  def index
  # or
  def show

If you use Sinatra, Roda or etc., you need to require it first somewhere in you project:

require 'repost'

Then ask senpai to generate a string with html:


Example in Sinatra, Roda, etc. app:

class MyController < Sinatra::Base
  get '/' do


Full example:

UPD: authenticity token is turned off by default. Use :auto or 'auto' to turn on default authenticity token from Rails. Any other string value would be treated as custom auth token value.

# plain ruby
# Repost::Senpai.perform('http://......)

# Rails
redirect_post('',            # URL, looks understandable
  params: {
            a: 1,
            'b': { "c": 2 },
            d: [ 3, 4, 5 ],
            e: { f: 'string', g: [ 6, 7, 8 ] }
          },                                         # Your request body, also nested params and arrays
  options: {
    method: :post,                                   # OPTIONAL - DEFAULT is :post, but you can use others if needed
    status: :ok,                                     # OPTIONAL - DEFAULT is :ok. This is the http status that the form will be returned with.
    authenticity_token: 'auto',                      # OPTIONAL - :auto or 'auto' for Rails form_authenticity_token, string - custom token
    charset: 'Windows-1251',                         # OPTIONAL - DEFAULT is "UTF-8", corresponds for accept-charset
    form_id: 'CustomFormID',                         # OPTIONAL - DEFAULT is autogenerated
    autosubmit: false,                               # OPTIONAL - DEFAULT is true, if you want to get a confirmation for redirect
    autosubmit_nonce: '1d3n7i4ier',                  # RAILS - DEFAULT is content_security_policy_nonce, for pure Ruby - string identifier, more info -
    decor: {                                         # If autosubmit is turned off or Javascript is disabled on client
      section: {                                     # ... you can decorate confirmation section and button
        classes: 'red-bg red-text',                  # OPTIONAL - <DIV> section, set classNames, separate with space
        html: '<h1>Press this button, dude!</h1>'    # OPTIONAL - Any html, which will appear before submit button
      submit: {
        classes: 'button-decorated round-border',    # OPTIONAL - <Input> with type submit, set classNames, separate with space
        text: 'c0n71nue ...'                         # OPTIONAL - DEFAULT is 'Continue'

Authenticity Token (Rails)

Currently you can pass the authenticity token in two ways:


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

Copyright © 2019 Yaro.

GitHub license

That’s all folks.