3

だから私は私のサイトのすべてのメンバーをリストアップし、リストがよりよく整理されるように名前でグループ化します。したがって、私の見解では、すべてのメンバーは、次のようにメンバー名の最初の文字でグループ化されています。

B

Bakedfish
Beercan Dan
Bigmike33x 

C

Cynicalassassin
ect..

とにかく、私もこのリストをページ付けしたいのですが、Imが順序を使用している場合、未定義のメソッドエラーが発生するため、カミナリのページ付け引数をコントローラーに追加できません。

したがって、これは機能しません。

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

私の見解は次のようになります。

<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 %>

これが私のエラーメッセージです:

NoMethodError (undefined method `page' for #<Hash:0x007f78d4bf48f8>):
  app/controllers/members_controller.rb:10:in `index'
4

1 に答える 1

8

カミナリはpageメソッドを追加しますActiveRecord::Relationが、Member.all.group_byハッシュを返します。そのため、この例外が発生します。

ページネーションの後にグループ化を実行することをお勧めします。例:

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

アップデート

ヘルパーを使用するには、次paginateの2つの変数を割り当てることができます。

@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ヘルパーに渡します。

于 2012-05-25T16:46:58.427 に答える