ActiveRecord no actualiza la relación HABTM

Estoy usando un modelo simple para la autorización del usuario con dos User ActiveRecords y Role User y Role tienen una relación HABTM entre sí.

Intenté crear una interfaz de usuario para asignar roles a usuarios con casillas de verificación simples, como en Railscasts Episode # 17 .

Mi problema es que ni el User#new ni el User#update_attributes utilizan los parámetros enviados por mi formulario para actualizar la relación entre el objeto User y sus roles. params[:user][:role_ids] contiene los valores correctos. Pero llamar a @user.roles justo después de User.new(params[:user]) o @user.update_attributes(params[:user]) devuelve una matriz vacía.

La asignación manual de roles con @user.roles o @user.role_ids funciona, pero no la “magia” dentro de User#new o User#update_attributes .

¿Algunas ideas?

Las posibilidades de que tenga attr_accessible o attr_protected call en su modelo de usuario son altas, lo que hace que role_ids esté protegido de la asignación masiva.

Si realmente desea actualizar roles a través de operadores de asignación masiva, simplemente agregue

 attr_accessible :role_ids 

a tu modelo Sin embargo, le recomiendo que lea http://railspikes.com/2008/9/22/is-your-rails-application-safe-from-mass-assignment primero, solo para conocer todos los problemas potenciales de la asignación masiva.