面对问题。
permit
nil:NilClass
def update_all
authorize Role
@roles = current_account.roles.where(admin: false)
@roles.each do |role|
permissions = params[:permissions]&.[](role.id.to_s)
role.update(permission_params(permissions))
end
redirect_to edit_all_roles_path, notice: 'Permissions updated!'
end
在permissions = params[:permissions]&.[](role.id.to_s)
行中
已过滤permissions
。有时会返回nil
。我理解为什么方法permit
未定义。但我怎么能避免呢?
def permission_params(permission_params)
permission_params.permit(permissions: [])
end
答案 0 :(得分:1)
如果查询结果为nil,假设您不希望更新角色的权限,除非有权限,否则您可以跳过更新:
@roles.each do |role|
permissions = params[:permissions]&.[](role.id.to_s)
role.update(permission_params(permissions)) unless permissions.nil?
end
Nil-guard并不理想,所以我可能会退后一步,看看为什么你首先获得nil
权限的原因。希望这有帮助!