首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >kaminari的专家政策

kaminari的专家政策
EN

Stack Overflow用户
提问于 2018-07-19 14:02:29
回答 1查看 113关注 0票数 1

我面临一个问题,gem kaminari覆盖了限制。我知道页面覆盖了限制,但找不到解决问题的任何其他解决方案。

问题:

我的政策范围:

代码语言:javascript
运行
复制
def resolve
  scope.limit(5)
end

当我打电话的时候

代码语言:javascript
运行
复制
users = policy_scope(User)
user.count # returns 5 (thats what I want)

但是当我和kaminari一起使用policy_scope时

代码语言:javascript
运行
复制
users = policy_scope(User).page(1)
user.count # returns 100 (not what I want, I want pagination to happen to 5 users that the policy returns)

有没有人面临同样的问题,并在周围找到工作?

EN

回答 1

Stack Overflow用户

发布于 2018-07-19 15:00:18

看起来页面方法是在这里生成的:extension.rb

您可以对其进行修补,但我建议保留原来的page方法,并为您的特定目的创建一个新方法。如果您不介意将它命名为page_with_policy,那么这个应该可以:

代码语言:javascript
运行
复制
module Kaminari
  module ActiveRecordModelExtension
    extend ActiveSupport::Concern

    included do
      include Kaminari::ConfigurationMethods

      # Fetch the values at the specified page number
      #   Model.page(5)
      eval <<-RUBY, nil, __FILE__, __LINE__ + 1
        def self.page_with_policy(num = nil)
          per_page = policy_scope(User).count
          limit(per_page).offset(per_page * ((num = num.to_i - 1) < 0 ? 0 : num)).extending do
            include Kaminari::ActiveRecordRelationMethods
            include Kaminari::PageScopeMethods
          end
        end
      RUBY
    end
  end
end

将其添加到lib/kaminari/activerecord/active_record_model_extension.rb (如果这些目录不存在的话创建它们),并添加一些文档来解释为什么要对其进行修补(未来的开发人员将感谢您)。

此外,为了能够使用pundit方法,您可能必须在该文件中包含policy_scope助手。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51424656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档