【发布时间】:2018-05-03 12:05:25
【问题描述】:
我有一个 if else 语句,我在其中检查是否以前选择过某些公司。如果列表为空,我想传递 @companies = "Empty" 以便我可以使用它来呈现不同的视图。然而,Pundit 需要提供一家公司。
有没有办法在方法中的特定点跳过授权?在这种情况下,请在评论 #Skip authorize @companies here?
policy_scope(Company)
if params[:query].present?
if (Company.search_by_name_and_category(params[:query].capitalize) - @selected_companies).empty?
@companies = "Empty"
# Skip authorize @companies here
else
@companies = (Company.search_by_name_and_category(params[:query].capitalize) - @selected_companies)
@companies.each {|company| authorize company }
end
else
@companies = Company.all - @selected_companies
@companies.each {|company| authorize company }
end
【问题讨论】:
-
我建议您设置
@companies = [],这样您就可以始终依赖在您的视图中拥有一个数组。在视图中,我会检查if @companies.empty?以查看其中是否有任何内容。我在 if 条件的第一个分支中没有看到授权步骤 -
是的,如果我取消注释 authorize @companies 我会得到以下信息:Pundit::AuthorizationNotPerformedError - UserselectionsController:
-
我认为有一个
skip_authorization助手,见github.com/varvet/pundit -
是的,就是这样!!!!谢谢!!!
标签: ruby-on-rails pundit