Kaminari and order_by

So, I list all the members of my site and group them by name so that the list is better organized. Therefore, in my opinion, all my members are grouped by the first letter of their member’s name, for example:

B

Bakedfish
Beercan Dan
Bigmike33x 

C

Cynicalassassin
ect..

In any case, I also want to paginate the pages on this list, but I cannot add the Kaminari pagination arguments to my controller if Im using order because I get an undefined method error.

therefore this does not work:

@members = Member.all.group_by{|u| u.fullname[0].titleize}.page(params[:page]).per(18)

my view is as follows:

<div class="content">
  <%= paginate @members %>
</div>
    <% @members.keys.sort.each do |starting_letter| %>
            <h3>
            <%= link_to starting_letter, {:action => :browse, :controller =>:members, :letter => starting_letter } %>
</h3>
      <ol>
                <% @members[starting_letter].each do |member| %>
                    <li>
                        <% if member.is_artist? %>
                            <%= link_to member.full_name, member_path(member), :class=>"artist" %>
                        <% else %>
                            <%= link_to member.full_name, member_path(member) %>
                        <% end %>
                    </li>
                <% end %>
        </ol>
    <% end %>

Here is my error message:

NoMethodError (undefined method `page' for #<Hash:0x007f78d4bf48f8>):
  app/controllers/members_controller.rb:10:in `index'
+3
source share
1 answer

Kaminari adds the method pageto ActiveRecord::Relation, but Member.all.group_byreturns a hash. That is why you get this exception.

, :

@members = Member.order(:full_name).page(params[:page]).per(18).to_a.group_by { |u| u.fullname[0].upcase }

UPDATE

paginate, , :

@paginated_members = Member.order(:full_name).page(params[:page]).per(18)
@members = @paginated_members.to_a.group_by { |u| u.fullname[0].upcase }

@paginated_members paginate.

+7

All Articles