未定义的方法允许强大的参数

时间:2017-03-11 20:11:40

标签: ruby-on-rails ruby-on-rails-5

面对问题。 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

1 个答案:

答案 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权限的原因。希望这有帮助!