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

时间:2013-08-28 02:32:49

标签: ruby-on-rails amazon-s3 ruby-on-rails-4

这感觉应该很简单,但谷歌搜索了一个小时后我无法理解这一点。

我正在将Amazon S3'政策文件'作为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。

任何帮助都将受到高度赞赏!

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

试试这个

配置/初始化/ wrap_parameters.rb

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

答案 2 :(得分:0)

我可以通过添加:

来禁用此控制器的参数包装
class Api::Amazons3Controller < Api::BaseController
 wrap_parameters format: []