2013-08-28 4 views
0

Такое ощущение, что это должно быть просто, но после Googling в течение часа я не могу понять это.Rails 4: предотвратить добавление корневого узла 'to_json'?

Я отправляю документ политики 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 с params.except (: действие,: контроллер), но policy_document.to_json добавляет коренная нота, называемая «amazons3» (имя контроллера) вокруг JSON, чего я не хочу. Мне просто нужно закодировать чистый json из запроса.

Любая помощь была бы высоко оценена!

+1

Ваш ответ находится здесь [http://stackoverflow.com/questions/6515436/rails-3-1-include-root-in-json][1] [1]: http://stackoverflow.com/questions/6515436/rails-3-1-include-root-in-json – techvineet

+0

Спасибо за указание мне wrap_parameters, если я изменю, что он работает, но мне нужно wrap_parameters всюду в моем приложении .. просто не в этом конкретном методе. Что-нибудь я могу с этим поделать? – 502502

ответ

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

Это вызывает исключение: ActionController :: RoutingError (неопределенный метод 'include_root_in_json =' для Api :: Amazons3Controller: Class) – 502502

0

Попробуйте это то

конфигурации/Инициализаторы/wrap_parameters.rb

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

Нет, это не работает – 502502

0

Я был в состоянии отключить Обтекание параметров для этого контроллера, добавив:

class Api::Amazons3Controller < Api::BaseController 
wrap_parameters format: [] 
Смежные вопросы