Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails pundit作用域不从返回或阻止_Ruby On Rails_Ruby_Pundit - Fatal编程技术网

Ruby on rails Rails pundit作用域不从返回或阻止

Ruby on rails Rails pundit作用域不从返回或阻止,ruby-on-rails,ruby,pundit,Ruby On Rails,Ruby,Pundit,在我的应用程序中,我想阻止用户再次参加法律考试。为此,我使用以下策略的权威授权: class TestResultPolicy < ApplicationPolicy def new? !passed? || validation_not_finished? end private def passed? user.test_results.where.not(test_result: 'passed').any? end end class Te

在我的应用程序中,我想阻止用户再次参加法律考试。为此,我使用以下策略的权威授权:

class TestResultPolicy < ApplicationPolicy
  def new?
    !passed? || validation_not_finished?
  end

  private

  def passed?
    user.test_results.where.not(test_result: 'passed').any?
  end
end
class TestResultPolicy
我在以下控制器中使用:

class TestResultsController < ApplicationController
  before_action :randomize_questions, only: %i[new create]

  def new
    @test_result = TestResult.new
    authorize @test_result
  end

  def create
    #some actions
  end
class TestResultsController

问题是,当用户已经通过测试时,他仍然有能力参加另一个测试(能够访问
测试结果\u路径
)。如果我离开
!通过?
一切都将正常工作,但如果我添加或条件
| | | validation| u未完成?
它将使整个块为true,而不是返回false,并跳过| |?

|
=>调用的逻辑OR运算符。如果两个操作数中的任何一个为真,则条件变为真

> false || false
=> false
> false || true
=> true
> true || false
=> true
> true || true
=> true
当用户测试失败时,您可以显式返回
false
,这样它将跳过检查
验证是否未完成?

class TestResultPolicy < ApplicationPolicy
  def new?
    return false if failed?
    validation_not_finished?
  end

  private

  def failed?
    user.test_results.where.not(test_result: 'passed').any?
  end
end
class TestResultPolicy