0

J'ai une application Rails 4.2.7 avec rails_admin (0.8.1), pundit (1.1.0) et mongoid (5.1.4)Méthode non définie `to_criteria 'avec Rails 4.2.7, Pundit, Mongoid et RailsAdmin

J'ai créé Campagne échafaudage et ajouté authorize @campaign à set_campaign dans CampaignController. quand je passe en revue à http://localhost:3000/campaigns/57b34dd3f5740c23d3066e43 je reçois unable to find policy CampaignPolicy for <Campaign _id ...

J'ai couru rails g pundit:policy campaign pour créer CampaignPolicy et montrer maintenant fonctionne action. Mais quand je passe en revue à RailsAdmin http://localhost:3000/admin/campaign je reçois:

undefined method `to_criteria' for Campaign:Class 
lib/mongoid/criteria.rb merge! method 

I "résolu" en modifiant Portée à l'intérieur CampaignPollicy comme ça, mais je me demande s'il y a une meilleure solution

class CampaignPolicy < ApplicationPolicy 
    def show? 
    true 
    end 
    class Scope 
    attr_reader :user, :scope 
     def initialize(user, scope) 
     @user = user 
     @scope = scope 
    end 
    def resolve 
    end 
    end 
end 

Répondre

0

OK, figured it et pensé que je partagerais la réponse.

class CampaignPolicy < ApplicationPolicy 
    ... 
    class Scope 
    def resolve 
     if @user.admin? 
     scope.all # this prevents undefined method `to_criteria' 
     else 
     scope.where(...) # put some biz logic here 
     end 
    end 
    end 
end