rails 4 redirect back with new params

11,945

Solution 1

Try this:

# get a URI object for referring url 
referrer_url = URI.parse(request.referrer) rescue URI.parse(some_default_url)
                    # need to have a default in case referrer is not given


# append the query string to the  referrer url
referrer_url.query = Rack::Utils.parse_nested_query(referrer_url.query).
                    # referrer_url.query returns the existing query string => "f=b"
                    # Rack::Utils.parse_nested_query converts query string to hash => {f: "b"}
                    merge({cp: 'foo'}).
                    # merge appends or overwrites the new parameter  => {f: "b", cp: :foo'}
                    to_query
                    # to_query converts hash back to query string => "f=b&cp=foo"



# redirect to the referrer url with the modified query string
redirect_to referrer_url.to_s
                    # to_s converts the URI object to url string

Solution 2

You can put it in session and then redirect back

session[:somekey] = value
redirect_to :back

Solution 3

Another approach could be to pass it via "flash" (it goes away automatically after the redirect request):

flash[:somekey] = 'some value'
redirect_to :back

However, as one of my colleagues noted, a better way is probably to return it as a query param, to keep it stateless and distinguish the two URLs. It seems there isn't a nice, built-in Rails way to do that, which makes me wonder what else is wrong with this approach.

Share:
11,945

Related videos on Youtube

user1066183
Author by

user1066183

I am a Italian software engeneering

Updated on September 28, 2022

Comments

  • user1066183
    user1066183 over 1 year

    Is it possible to redirect back to the referring url with a new param in the query string?

    something like this:

    redirect_to :back, custom_param='foo'
    
    • fatuhoku
      fatuhoku almost 8 years
      It's 2016 surely there has to be a better way to do this!
    • Chiperific
      Chiperific almost 6 years
      It's 2018 surely there has to be a better way to do this!
  • techvineet
    techvineet over 10 years
    When you use session the values in session remains there between requests.
  • user1066183
    user1066183 over 10 years
    yes but i need to put the params in the link, i need some like this: localhost:3000/?locale='pt'