【问题标题】:Undefined method `to_criteria' with Rails 4.2.7, Pundit, Mongoid and RailsAdminRails 4.2.7、Pundit、Mongoid 和 RailsAdmin 的未定义方法“to_criteria”
【发布时间】:2016-08-17 23:23:41
【问题描述】:

我有一个带有 rails_admin (0.8.1)、pundit (1.1.0) 和 mongoid (5.1.4) 的 Rails 4.2.7 应用程序

我创建了 Campaign 脚手架并将 authorize @campaign 添加到 CampaignController 中的 set_campaign。当我浏览到http://localhost:3000/campaigns/57b34dd3f5740c23d3066e43 我得到unable to find policyCampaignPolicyfor <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

我通过像这样修改 CampaignPollicy 中的 Scope 来“解决”它,但我想知道是否有更好的解决方案

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 rails-admin pundit mongoid5


    【解决方案1】:

    好的,想通了,我想我会分享答案。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多