在 rails 中从 will_paginate 切换到 pagy gem 时,方法 "where" 不起作用
method "where" does not work when switched from will_paginate to pagy gem in rails
我在控制器中的 will_paginate 代码:
@posts = Post.paginate(page: params[:page], per_page: 100).order('created_at DESC')
我替换它的页面代码:
@pagy, @posts = pagy_countless(Post.order('created_at DESC'), items:5, link_extra: 'class="" style="color:#222222; margin:3px;"')
我认为问题所在:
<% @posts.where(user_id: current_user.friends).each do |post| %>
错误信息:
undefined method `where' for #<Array:0x00007f94329d1f70>
Did you mean? when
我做错了什么?之前的 will_paginate 实现在显示用户朋友的所有帖子方面起作用。我不知道切换到 pagy 后发生了什么变化。
更新:
所以目前,我通过将 "where..." 逻辑移至控制器解决了这个问题。所以:
@pagy, @posts = pagy_countless(Post.where(user_id: current_user.friends).order('created_at DESC'), items:5, link_extra: 'class="" style="color:#222222; margin:3px;"')
现在一切如常。但我仍然对为什么我必须这样做感到困惑。
注意 pagy_countless
returns 项目数组,而不是 ActiveRecord 集合。这就是为什么你不能在 @posts
(比如 where
)上使用 ActiveRecord 方法的原因。
按照我的 link 来查看使用 to_a
将集合转换为数组,然后将其作为 pagy_countless
的第二个参数返回:https://github.com/ddnexus/pagy/blob/bd88866ad6001ae1ef6ce63080d36ecff7bc5603/lib/pagy/extras/countless.rb#L29
两条评论:
1. 在对集合调用 pagy_countless
之前必须使用 ActiveRecord 过滤器(例如:where
子句)
2.如果需要在分页后过滤记录(大多数情况下没有意义),必须使用Array
方法,如reject
的select
如下@posts.select { |record| record.user.in?(current_user.friends) }
我在控制器中的 will_paginate 代码:
@posts = Post.paginate(page: params[:page], per_page: 100).order('created_at DESC')
我替换它的页面代码:
@pagy, @posts = pagy_countless(Post.order('created_at DESC'), items:5, link_extra: 'class="" style="color:#222222; margin:3px;"')
我认为问题所在:
<% @posts.where(user_id: current_user.friends).each do |post| %>
错误信息:
undefined method `where' for #<Array:0x00007f94329d1f70>
Did you mean? when
我做错了什么?之前的 will_paginate 实现在显示用户朋友的所有帖子方面起作用。我不知道切换到 pagy 后发生了什么变化。
更新:
所以目前,我通过将 "where..." 逻辑移至控制器解决了这个问题。所以:
@pagy, @posts = pagy_countless(Post.where(user_id: current_user.friends).order('created_at DESC'), items:5, link_extra: 'class="" style="color:#222222; margin:3px;"')
现在一切如常。但我仍然对为什么我必须这样做感到困惑。
注意 pagy_countless
returns 项目数组,而不是 ActiveRecord 集合。这就是为什么你不能在 @posts
(比如 where
)上使用 ActiveRecord 方法的原因。
按照我的 link 来查看使用 to_a
将集合转换为数组,然后将其作为 pagy_countless
的第二个参数返回:https://github.com/ddnexus/pagy/blob/bd88866ad6001ae1ef6ce63080d36ecff7bc5603/lib/pagy/extras/countless.rb#L29
两条评论:
1. 在对集合调用 pagy_countless
之前必须使用 ActiveRecord 过滤器(例如:where
子句)
2.如果需要在分页后过滤记录(大多数情况下没有意义),必须使用Array
方法,如reject
的select
如下@posts.select { |record| record.user.in?(current_user.friends) }