首页 > 解决方案 > 我收到此错误我通常知道如何解决它,但在 SavedHairstylesController#create 中不起作用 Pundit::AuthorizationNotPerformedError

问题描述

上下文:我正在为我的应用程序创建书签功能,它似乎正在运行,然后遇到 Pundit 错误Pundit::AuthorizationNotPerformedError in SavedHairstylesController#create

这很奇怪,因为我有 a) 为我的书签模型生成了一个名为 saved_hairstyle_policy.rb 的策略,在这个策略中,我为每个方法返回了“true”。

b)在我的 Saved_Hairstyles 控制器中,我有一个 CREATE 和 DESTROY 方法,并且在每个方法中我都编写了授权 @saved_hairstyle

c)在我看来,我已经提到了这样的政策:policy(Saved_Hairstyle).create?

有任何想法吗?

要遵循的代码:

Saved_hairstyle_policy.rb:

class SavedHairstylePolicy < ApplicationPolicy
  class Scope < Scope
    def resolve
      scope.all
    end
  end

  def create?
    return true
  end

  def destroy?
    return true
  end
end

Saved_Hairstyle 控制器:

class SavedHairstylesController < ApplicationController
   def create    
    @hairstyle = Hairstyle.find(params[:hairstyle_id])
    authorize @saved_hairstyle
  (current user) &  hairstyle
    @saved_hairstyle = SavedHairstyle.new(user: current_user, hairstyle: @hairstyle)  
    if @saved_hairstyle.save
      respond_to do |format|   
        format.html { redirect_to hairstyle_path(@saved_hairstyle.hairstyle) }
        format.js 
      end
    else
      respond_to do |format|
        format.html { render 'hairstyles' }
        format.js  
      end
    end
  end

  def destroy    
    @saved_hairstyle = SavedHairstyle.find(params[:id])
    authorize @saved_hairstyle    
    @saved_hairstyle.destroy
    @hairstyle = @saved_hairstyle.hairstyle
    respond_to do |format|
      format.html { redirect_to hairstyle_path(@saved_hairstyle.hairstyle)}
      format.js
    end
  end
end

index.html 视图文件:

 <div class="bookmark">
              <% saved_hairstyle = SavedHairstyle.find_by(user: current_user, hairstyle: hairstyle.id) %>
              <% if saved_hairstyle && policy(Saved_Hairstyle).create?  %>
                <%= link_to saved_hairstyle_path(saved_hairstyle), method: :delete do %>
                  <i class="fas fa-plus-circle"></i>
                <% end %>
              <% elsif %>
                <% !saved_hairstyle && policy(Saved_Hairstyle).delete?  %>
                <%= link_to hairstyle_saved_hairstyles_path(hairstyle), method: :post do %>
                  <i class="fas fa-plus"></i>
                <% end %>
              <% end %>
            </div>

标签: ruby-on-railsrubypundit

解决方案


推荐阅读