Rails 4:阻止'to_json'添加根节点?



这感觉应该很简单,但在谷歌上搜索了一个小时后,我想不通。

我正在将AmazonS3的"策略文档"作为JSON发布到我的服务器上。我需要按原样对JSON进行编码,但Rails正在向"params"添加一些内容,这会使我需要编码的JSON变得混乱。

这是我所拥有的:

class Api::Amazons3Controller < Api::BaseController
 def sign_policy
   policy_document = params.except(:action, :controller)
   encoded_policy_document = Base64.encode64(policy_document.to_json).gsub(/n|r/, '')
   signature = Base64.encode64(
     OpenSSL::HMAC.digest(
       OpenSSL::Digest::Digest.new('sha1'), 
       ENV['AWS_SECRET_ACCESS_KEY'], 
       policy_document)
   ).gsub(/n/, '')
   response = { policy: policy_document, signature: signature }
   render json: response
 end
end

我正试图用params.except(:action,:controller)"清理"params,但policy_document.to_json在json周围添加了一个名为"amazons3"(控制器名称)的根注释,这是我不想要的。我只需要对请求中的纯json进行编码。

如有任何帮助,我们将不胜感激!

class Api::Amazons3Controller < Api::BaseController
    self.include_root_in_json = false
end

试试这个,然后

config/initializers/wrap_parameters.rb

if defined?(ActiveRecord)
  ActiveRecord::Base.include_root_in_json = false
end

我可以通过添加:来禁用此控制器的参数封装

class Api::Amazons3Controller < Api::BaseController
 wrap_parameters format: []

最新更新