如何在控制器中不使用Rails动作参数

Joh*_*ght 7 ruby-on-rails

我正在Rails服务器中为Shipworks实现第三方API,而Shipworks客户端应用程序正在发布action具有Shipworks特定语义的参数.

但是,Rails路由逻辑会将此参数覆盖为控制器方法的名称.

是否有一个自定义路由我可以编写以获取该操作参数的值而不将其覆盖为我的控制器方法的名称?

Pet*_*etr 11

我今天陷入了这个陷阱,并在控制器方法中提供了这个解决方案.这是Rails 4.1:

if request.method == "POST"
  action = request.request_parameters['action']
else
  action = request.query_parameters['action']
end
Run Code Online (Sandbox Code Playgroud)


Joh*_*ght 3

我想到了。AbstractRequestraw_post中有一个方法。

所以你可以这样做来解析原始帖子参数:

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
Run Code Online (Sandbox Code Playgroud)

然后只需调用 raw_post_to_hash[:action] 即可访问原始操作参数或任何其他参数。可能有一个更简单的方法。

  • 为什么不使用 Rack::Utils.parse_nested_query 来解析这个字符串? (2认同)