我正在Rails服务器中为Shipworks实施第三方API,而Shipworks客户端应用程序正在发布具有Shipworks特定语义的action
param。
然而,Rails路由逻辑会将此参数覆盖为控制器方法的名称。
我是否可以编写自定义路由以获取该操作参数的值而不将其覆盖为我的控制器方法的名称?
答案 0 :(得分:11)
我今天陷入了这个陷阱,并在控制器方法中提供了这个解决方案。它的Rails 4.1:
if request.method == "POST"
action = request.request_parameters['action']
else
action = request.query_parameters['action']
end
答案 1 :(得分:3)
我明白了。 AbstractRequest中有一个raw_post
方法。
所以你可以这样做来解析原始的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
然后只需调用raw_post_to_hash [:action]来访问原始操作参数或任何其他参数。可能有一种更简单的方法。