我面临一个问题,gem kaminari覆盖了限制。我知道页面覆盖了限制,但找不到解决问题的任何其他解决方案。
问题:
我的政策范围:
def resolve
scope.limit(5)
end
当我打电话的时候
users = policy_scope(User)
user.count # returns 5 (thats what I want)
但是当我和kaminari一起使用policy_scope时
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)
有没有人面临同样的问题,并在周围找到工作?
发布于 2018-07-19 15:00:18
看起来页面方法是在这里生成的:extension.rb
您可以对其进行修补,但我建议保留原来的page
方法,并为您的特定目的创建一个新方法。如果您不介意将它命名为page_with_policy
,那么这个应该可以:
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
助手。
https://stackoverflow.com/questions/51424656
复制相似问题