Rails collection_select不保存params散列中的所有值

时间:2014-12-27 00:11:04

标签: ruby-on-rails roles

所以,我正在尝试使用Rails实现简单的基于角色的身份验证系统,而我在最后一步改变角色时遇到了问题。

roleuser表中的属性,其类型为string

想法是,一些有特权的用户有能力改变角色。

view中的代码如下所示:

<div>
    <%= f.label :role, 'Role' %>
    <%= f.collection_select :role, User::ROLES, :to_s, :humanize, 
                             prompt: 'Select role' %>
</div>
update中的

users_controller方法如下所示:

def update
    @user = User.find(params[:id])
    if @user.update(update_params) #update_params is method that returns permitted parameters
        redirect_to @user   
    else
        render :edit
    end
end

问题是提交表单后user[role]为空。

一切都是“靠书”制作的。此外,我使用的是Cancan,但editupdate load_and_authorize_resource :except => [:update, :edit]已关闭。

1 个答案:

答案 0 :(得分:0)

所以,我找到了解决方案。由于我使用CanCan和user_params方法,因此CanCan本身可以设置允许的参数,我的update_params方法会被忽略。

解决方案是将:role添加到user_params方法。