My will_paginate code in controller:
@posts = Post.paginate(page: params[:page], per_page: 100).order('created_at DESC')
My pagy code that replaced it:
@pagy, @posts = pagy_countless(Post.order('created_at DESC'), items:5, link_extra: 'class="" style="color:#222222; margin:3px;"')
My view where the problem is:
<% @posts.where(user_id: current_user.friends).each do |post| %>
The error message:
undefined method `where' for #<Array:0x00007f94329d1f70>
Did you mean? when
What am I doing wrong? The previous will_paginate implementation worked in terms of showing all the posts of user's friends. I'm lost as to what changed in switching to pagy.
UPDATE:
So for the moment, I've solved this by moving the "where..." logic to controller. So:
@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;"')
And now it works as before. But I'm still confused as to why I had to do this.
Be aware
pagy_countlessreturns an array of items, instead of an ActiveRecord collection. That's why you can't use ActiveRecord methods on@posts(likewhere).Follow my link to see that collection is transformed into array using
to_aand then it is returned as second argument ofpagy_countless: https://github.com/ddnexus/pagy/blob/bd88866ad6001ae1ef6ce63080d36ecff7bc5603/lib/pagy/extras/countless.rb#L29Two comments:
1. You must use ActiveRecord filters before calling
pagy_countlesson your collection (eg:whereclauses)2. If you need to filter records after pagination (which does not make sense in most of the cases), you must use
Arraymethods likeselectofrejectas following@posts.select { |record| record.user.in?(current_user.friends) }