Aggiornamento HABTM e checkbox

Ciao a tutti,
chiedo un aiuto perché dopo 1 ora che ci provo mi sembro scemo :slight_smile:

In un’applicazione Rails3 in cui sto cercando di configurare
Devise+CanCan ho due modelli (User e Role) legati HABTM, vorrei
aggiornare la relazione con i ruoli quando aggiorno un utente. Ho
seguito le decine di guide presenti online, ma non funziona. Sgrunt!

Se, da console, faccio:

@user.role_ids=[1,3]
@user.save

funziona correttamente. Invece:

users_controller.rb

def update
params[:user][:role_ids] ||= []

@user = User.find(params[:id])
@roles = Role.all

if @user.update_attributes(params[:user])
flash[:success] = I18n.t(‘flash.users.success.user_updated’)
redirect_to ‘/users’
else
respond_to do |format|
format.html { render :action => :edit}
end
end
end

views/users/edit.html.erb

<% @roles.each do |role| -%>
<%= check_box_tag “user[role_ids][]”, role.id, @user.role?(role.name)
-%> <%= role.name.camelize -%>
<% end -%>

Non funziona.
Ugualmente, se da console creo un hash uguale a param[:user], ovvero:

“user”=>{
“email”=>“[email protected]”,
“name”=>“Admin”,
“surname”=>“Istrator”,
“role_ids”=>[“1”, “2”] #uguale con “role_ids”=>[1, 2]
}

e lo passo a update_attributes, non funziona.

Ora mi chiedo: devo inserire nel modello qualcosa che mi permetta
l’aggiornamento del modello Role? Nessun howto lo cita e non ho trovato
qualcosa che sembri fare al caso mio… (ho provato
accepts_nested_attributes_for ma niente)
Non funziona perchè Devise o CanCan ci si mettono in mezzo??

Aiuto! :slight_smile:
Tommaso