I am implementing a third party API for Shipworks in a Rails server and the Shipworks client app is posting an action
param with Shipworks specific semantics.
However the Rails routing logic overwrites this param to be the name of the controller method.
Is there a custom route I could write to get the value of that action param without it being overwritten to be the name of my controller method?
Action Controllers are the core of a web request in Rails. They are made up of one or more actions that are executed on request and then either it renders a template or redirects to another action.
Note that parameter values are always strings; Rails does not attempt to guess or cast the type.
Strong Parameters, aka Strong Params, are used in many Rails applications to increase the security of data sent through forms. Strong Params allow developers to specify in the controller which parameters are accepted and used.
Specifically, params refers to the parameters being passed to the controller via a GET or POST request. In a GET request, params get passed to the controller from the URL in the user's browser.
I fell into this trap today and came with this solution in controller method. It's Rails 4.1:
if request.method == "POST"
action = request.request_parameters['action']
else
action = request.query_parameters['action']
end
I figured it out. There is a raw_post
method in AbstractRequest.
So you can do this to parse the raw post params:
def raw_post_to_hash
request.raw_post.split(/&/).inject({}) do |hash, setting|
key, val = setting.split(/=/)
hash[key.to_sym] = val
hash
end
end
and then just call raw_post_to_hash[:action] to access the original action param or any other param. There is probably an easier way.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With