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