2015-12-26 102 views
0

我原來的問題解決了,但它再次發生,並用同樣的方法權威人士政策

我正在寫在Rails的一個簡單的API,使用AuthLogic和權威人士授權是不固定的,而有這樣的錯誤:

unable to find policy `SkryptPolicy` for `#<Skrypt id: 1, title: "Maths", route: "/maths/:action", script: "def main params[:one] * params[:two] if params[:ac...", user_id: nil, created_at: "2015-12-27 02:12:36", updated_at: "2015-12-27 02:12:36">` 

我沒有授權nil最喜歡的這個,我發現其他問題,並且存在所有相關的文件,所以我想不通這是怎麼回事。

我還在研究另一個使用Pundit和AuthLogic相同組合的應用程序,即使使用相同的文件/類名稱,它也可以很好地工作。

這是我app/controllers/application_controller.rb

class ApplicationController < ActionController::Base 
    include Pundit 

    protect_from_forgery with: :null_session 

    before_filter { response.header['Access-Control-Allow-Origin'] = '*' if request.format.json? } 

    protected 
    def current_user_session 
     return @current_user_session if defined?(@current_user_session) 
     @current_user_session = UserSession.find 
    end 

    def current_user 
     return @current_user if defined?(@current_user) 
     @current_user = (current_user_session && current_user_session.user) || User.find_by(api_key: params[:api_key]) 
    end 
end 

app/policies/skrypt_policy.rb

class SkryptPolicy < Struct.new(:user, :skrypt) 
    class Scope < Scope 
    def resolve 
     user.skrypts 
    end 
    end 

    def index? 
    not user.nil? 
    end 
    alias_method :create?, :index? 

    def show? 
    user && (skrypt.user == user) 
    end 
    alias_method :update?, :show? 
    alias_method :destroy?, :show? 
end 

回答

0

右...

TL; DR - 重新啓動服務器固定它

對於一些理由,恢復我正在運行的rails server實例解決了這個問題。也許Pundit在配置文件中加載了一些策略?我不知道,因爲我在啓動服務器之前在我的Gemfile中加載了pundit寶石,但未將其包含在我的ApplicationController中。也許那個東西起來了。

編輯

然而,現在另一控制器有同樣的問題!

class Scope < Scope 

這樣::

好了,第二個問題是通過在命令行上運行rails g pundit:install,然後改變app/policies/skrypt_policy.rb這一行解決

class Scope < ApplicationPolicy::Scope