# Aggiornamento HABTM e checkbox

**URL:** <https://www.ruby-forum.com/t/aggiornamento-habtm-e-checkbox/194871>\
**Category:** IT\
**Created:** [September 12, 2010, 7:31pm UTC](https://www.ruby-forum.com/t/aggiornamento-habtm-e-checkbox/194871 "2010-09-12T19:31:11Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tommaso\_V](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/8e7dd6/32.png) [@Tommaso\_V](https://www.ruby-forum.com/u/Tommaso_V)\
**Post date:** [September 12, 2010, 7:31pm UTC](https://www.ruby-forum.com/t/aggiornamento-habtm-e-checkbox/194871/1 "2010-09-12T19:31:11Z")

</div>

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

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”=\>“removed\_email\_address@domain.invalid”,  
“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! 🙂  
Tommaso
