ParamsKeeperRails

A rails controller extension for keeping specific parameters through links.

Dependencies

  • ruby 2.3+
  • rails 5.0+

Installation

Add this line to your application's Gemfile:

gem 'params_keeper_rails'

And then execute:

$ bundle

Usage

Include modules in your controller and specify parameter keys you want to keep:

class ExamplesController < ApplicationController
  include ParamsKeeper::Controller
  keep_params :key1, :key2

Parameters are kept via url_for if destination controller is same as current controller. For example:

GET "/examples?key1=**&key2=**"

# hash arg
url_for(action: :index)  #=> '/examples?key1=**&key2=**'

# parameters are not kept if string or model arg is specified
url_for('/examples')  #=> '/examples'
url_for(@example)  #=> '/examples/:id'

# parameters are not kept if destination controller is different from current controller
url_for(controller: 'examples2', action: :index)  #=> '/examples2'

# parameters are not kept if you put "keep_params: false" into args
url_for(action: :show, keep_params: false)  #=> '/examples/:id'

Parameters are kept for form with GET method via hidden fields. This feature is supported by form_with for rails >= 5.1.

<%= form_with url: { action: :index}, method: :get do %>
  <%= submit_tag 'submit' %>
<% end %>
#=> ...<input type="hidden" name="key1" value="**" />
#      <input type="hidden" name="key2" value="**" /></form>

Options

Argument type

Enable only specific argument type of url_for:

# hash arg (same as default behaviour)
keep_params :key1, :key2, for: :hash
url_for(action: :index)  #=> '/examples?key1=**&key2=**'

# string arg
keep_params :key1, :key2, for: :string
url_for('/examples')  #=> '/examples?key1=**&key2=**'

# model arg
keep_params :key1, :key2, for: :model
url_for(@example)  #=> '/examples/:id?key1=**&key2=**'

:for allows to set multiple argument type as follows:

keep_params :key1, :key2, for: [:hash, :model]

Multiple controllers

Keep parameters throught multiple controllers:

class ExamplesController < ApplicationController
  include ParamsKeeper::Controller
  keep_params :key1, :key2, to: %w(examples examples2)
end

class Examples2Controller < ApplicationController
  include ParamsKeeper::Controller
  keep_params :key1, :key2, to: %w(examples examples2)
end

Default parameters

Specify default parameters:

keep_params :key1, :key2, url_options: { fixed_param: :something }

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/kanety/params_keeper_rails.

License

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