Rails 3:只有当这样的输入区域存在时,才将'role_ids'值设置为空?

问题描述:

我有我的用户模型,并且用户可以有很多角色。Rails 3:只有当这样的输入区域存在时,才将'role_ids'值设置为空?

在用户形式I通过这样设置角色给用户:

<p><% for role in Role.all %> 
     <%= check_box_tag "user[roles_ids][]", role.id, @user.roles.include?(role) %> 
     <%= role.name %> 
    <% end %> 
    </p> 

,然后在控制器我有以下,以确保其清除出当用户没有选择的角色:

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

这一切都很好,但是我想要在控制器中有一个if语句,只有在返回这样的值时清空role_ids,原因是对于某些用户角色添加复选框不显示,因此他们不允许设置角色,但是当他们对其他属性进行更改时,它会清除之前与更新前存在的任何角色的所有关联。

我该如何解决这个问题?

感谢

您好我认为,如果你有不同的角色决定或者更新ID用户或不应该基于用户角色,而不是形式的数据,因此可以做某事像

params[ :user ][ :roles_ids ] = current_user.roles_ids unless current_user.has_role? :admin