2015-11-04 4 views
-1

я получаю массив JSON из другого приложения, которое выглядит следующим образом (из журнала)Read JSON рубин массив на рельсах

Parameters: {"auth_token"=>[{"auth_token"=>"d11D1E3v7pKkLW4wDj8ohgtf"}]} 

Этот массив будет больше (это причина для использования массивов), но я только тестирование, если я могу получить контент от него. Это моя функция:

def valid_request_array 
    data = ActiveSupport::JSON.decode(params)[:auth_token] 
    Usuario.find_by_auth_token(data[0]['auth_token']).present? 
end 

Я получаю следующее сообщение об ошибке:

TypeError (no implicit conversion of ActionController::Parameters into String): app/controllers/api/actas_controller.rb:35:in `valid_request_array'

Линия 35 является data = ActiveSupport::JSON.decode(params)[:auth_token]

У меня есть рельсы 4,2, а также пытались с JSON.parse(params) и JSON.parse(params[:auth_token]), но это не делает работы , Здесь есть аналогичный вопрос: JSON Array parsing in ROR, но мне нужно прочитать значение для аутентификации этого запроса. Подсказка:

ответ

1

Поскольку это Params, вам не нужно декодировать или разобрать его. Вам понадобится только это, если вы работаете на объекте jasonfied (or stringified). например, это примерно так:

"{\"auth_token\":[{\"auth_token\":\"d11D1E3v7pKkLW4wDj8ohgtf\"}]}" 

затем вы можете разобрать это, чтобы вернуть свой хэш-объект.

В этом случае вам не нужно, поскольку объект не является stringified. Вот почему вы испытываете эту ошибку:

no implicit conversion of ActionController::Parameters into String 

, чтобы получить маркер, однако, назвать его просто прямо как:

params["auth_token"].first["auth_token"] 

, который должен вернуть маркер d11D1E3v7pKkLW4wDj8ohgtf для вас.

+0

Оба ответа работают, но я собираюсь принять это, потому что ответ немного больше. Спасибо, я застрял с этим весь день – user2782149

0

Вы получаете эту ошибку, потому что params не является строкой, тогда как decode ожидает строку. params, который вы получаете, не находится в формате JSON. Попробуйте:

def valid_request_array 
    Usuario.find_by_auth_token(params[:auth_token][0]["auth_token"]).present? 
end 
Смежные вопросы