0

У меня есть приложение Rails 4.2.7 с rails_admin (0.8.1), pundit (1.1.0) и mongoid (5.1.4)Неопределенный метод `to_criteria 'с Rails 4.2.7, Pundit, Mongoid и RailsAdmin

Я создал кампанию scaffold и добавил authorize @campaign в set_campaign в CampaignController. когда я просматриваю к http://localhost:3000/campaigns/57b34dd3f5740c23d3066e43 я получаю unable to find policy CampaignPolicy for <Campaign _id ...

Я побежал rails g pundit:policy campaign создать CampaignPolicy и теперь показываю действие работает. Но когда я просматриваю к RailsAdmin http://localhost:3000/admin/campaign я получаю:

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

Я «решен» подправив Scope внутри CampaignPollicy как это, но мне интересно, если есть лучшее решение,

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 

ответ

0

КИ, понял это и подумал, что я поделюсь ответом.

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