2014-01-25 4 views
0

У меня есть следующий в моих Регистрациях контроллере:Принять JSON в Rails контроллере, когда неверный формат

class Api::V1::RegistrationsController < ApplicationController 

    skip_before_filter :verify_authenticity_token 
    respond_to :json 

    def create 

    user = User.new(params[user_params]) 

    if user.save 
     render :json => user.as_json(:auth_token=>user.authentication_token, :email=>user.email), :status=>201 
     return 
    else 
     warden.custom_failure! 
     render :json => user.errors, :status=>422 
    end 
    end 

    def user_params 
    params.require(:user).permit(:email, :password, :name, :phone, :acknowledgement) 
    end 

end 

Я понимаю, что это ожидает, что моя JSON, чтобы быть в форме

{user:{email:[email protected],name:"anotheruser"}} 

Однако JSON является отправляется как

{email:[email protected], name:"anotheruser"} 

Я не знаю, как настроить таргетинг на эти параметры. Каков синтаксис для этого? Кроме того, есть ли специальный способ обработки этого формата?

ответ

0

Ожидаемый json, который вы получили, будет хешем хэшей, но вы возвращаетесь только хешем, это то, на что это похоже.

Учитывая это, вам не нужно требовать: пользователь с: пользователя нет. Просто сделайте это.

params.permit (: email,: password,: name,: phone,: подтверждение), если params.present?

настоящее время? будет проверять, чтобы параметры не были пустыми или пустыми/пустыми. Вы могли бы поднять ошибку, если хотите, если настоящее? проверка не выполняется.

+0

С этим кодом я получаю параметр не найден: пользователь –

+0

Проверьте мое обновление. Сначала я неправильно понял этот вопрос. Я думал, что у вас возникли проблемы с доступом к хешу внутри хэша. Теперь я вижу, что у вас просто хэш, а не хэш хешей. Не ожидайте хеш хэшей, если у вас есть хэш. Вы получили то, что вы сделали, потому что require (: user) не нашел: пользовательский ключ, и это поддерживается json, который вы говорите, что вы действительно получаете. – josiah

+0

, если вы думаете, что иногда можете получить хэш хэшей с пользователем: ключ, то вы можете сделать что-то вроде ... if params.present? если PARAMS [:] Количество PARAMS [: пользователь] .permit (...) еще params.permit (...) конца конца – josiah

Смежные вопросы