1

json リクエストからユーザーを作成しようとしていますが、サーバーから「typeError (Symbol から Integer への暗黙的な変換はありません)」というメッセージが表示されます。ネストされた属性に何か問題があることは理解していますが、何がわからないのですか、これは私を夢中にさせています..

私のJavascriptファイル:

user = {
    email: @get('email')
    first_name: @get('firstName')
    last_name: @get('lastName')
    password: @get('password')
    password_confirmation: @get('passwordConfirmation')
    registration_completed: true

    authentications_attributes: {
        provider: @get('provider')
        uid: @get('uid')
    }
}

$.post("/api/users", { user })

パラメータ:

params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :registration_completed, authentications_attributes: [:id, :user_id, :provider, :uid])

コンソール:

Started POST "/api/users" for 127.0.0.1 at 2013-09-20 15:39:49 +0200
Processing by Api::UsersController#create as */*
  Parameters: {"user"=>{"email"=>"foo@example.com", "first_name"=>"Foo", "last_name"=>"Bar", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "registration_completed"=>"true", "authentications_attributes"=>{"provider"=>"facebook", "uid"=>"10000000"}}}
Completed 500 Internal Server Error in 97ms

TypeError (no implicit conversion of Symbol into Integer):
  app/controllers/api/users_controller.rb:17:in `create'

私は何を間違っていますか?もちろん、User.rb ファイルに "accepts_nested_attributes_for :authentications" があります。ありがとう!

アップデート

def create      
    @user = User.new(user_params)
    @user.authentications.build
    authorize! :create, @user

    if @user.save 
      render json: { user: { id: @user.id, auth_token: @user.session_api_key } }, status: 201
    else
      render json: { errors: @user.errors.messages }, status: :unprocessable_entity
    end
end
4

2 に答える 2

2

私のハッシュは間違っていました。正しいハッシュは次のとおりです。

user = {
    ....
    authentications_attributes: [
        {
            provider: @get('provider')
            uid: @get('uid')
        }
    ]
}
于 2013-09-23T10:49:58.097 に答える
0

これを試して、うまくいかない場合はお知らせください。

def new
  @user = User.new
  @user.authentications.build
end

def create
  @user = User.new(user_params)

  respond_to do |format|
    if @user.save
      format.json { user: { id: @user.id, auth_token: @user.session_api_key } }, status: 201
    else
      format.json { errors: @user.errors.messages }, status: :unprocessable_entity
    end
  end
end

private
def user_params
  params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :registration_completed, authentications_attributes: [:provider, :uid])
end
于 2013-09-23T08:10:01.777 に答える