Strong parameters with has_many gives “no implicit conversion of Symbol into Integer”

Trying to create a user from a json request but my server gives me “typeError (no implicit conversion of Symbol into Integer)”. I understand that it’s something wrong with my nested attribute but i dont know what, this’s driving me crazy…

My Javascript file:

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:

name, :last_name, :email, :password, :password_confirmation, :registration_completed, authentications_attributes: [:id, :user_id, :provider, :uid])

Console:

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'

Create method:

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

What am I doing wrong? And of course have i “accepts_nested_attributes_for :authentications” in my User.rb file. Thanks!

Trying to create a user from a json request but my server gives me “typeError (no implicit conversion of Symbol into Integer)”. I understand that it’s something wrong with my nested attribute but i dont know what, this’s driving me crazy…

in general that errors means that something is trying to use an array as a hash, ie passing a non integer key to []

Processing by Api::UsersController#create as */*
  Parameters: {"user"=>{"email"=>"f...@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


Those parameters aren’t right - authentications_attributes should be of the form

[ {‘provider’ => ‘facebook’, …} ]

or (since you can’t really do arrays of hashes when using regular forms

{

‘123456’ => {‘provider’ => ‘facebook’, …},

‘456789’ => {‘provider’ => ‘google’, …}

}

The keys in that hash are arbitrary. It’s common to use the current time in milliseconds - anything that is unique is good enough

Fred