所以,我正在尝试使用Rails实现简单的基于角色的身份验证系统,而我在最后一步改变角色时遇到了问题。
role
是user
表中的属性,其类型为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,但edit
和update
load_and_authorize_resource :except => [:update, :edit]
已关闭。
答案 0 :(得分:0)
所以,我找到了解决方案。由于我使用CanCan和user_params
方法,因此CanCan本身可以设置允许的参数,我的update_params
方法会被忽略。
解决方案是将:role
添加到user_params
方法。