2012-05-25 34 views
3

因此,我列出了我的網站的所有成員,並按名稱分組,以便列表更好地組織。kaminari and order_by

B 

Bakedfish 
Beercan Dan 
Bigmike33x 

C 

Cynicalassassin 
ect.. 

反正,我也想分頁這個名單,但我不能,如果使用順序,因爲即時通訊加雷的分頁參數來我的控制器:所以在我看來,我的所有成員按其成員名稱的像第一個字母組合我收到一個未定義的方法錯誤。

所以這並不工作:

@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' 
+0

如果你寫一個錯誤(消息,行等),那麼會更好。 – melekes

+0

我已經添加了錯誤信息,控制器中它的引用已經在那裏。 – rugbert

回答

7

雷增加了page方法ActiveRecord::RelationMember.all.group_by返回散列。這就是你得到這個例外的原因。

我建議進行分頁後分組,例如:

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

UPDATE

爲了使用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幫手。

+0

Ahh好了很好,錯誤已解決,但現在分頁助手沒有工作,我得到'未定義的方法'current_page''在線'<%= paginate @members%>' – rugbert

+0

我已經更新了關於'paginate'的答案幫手使用。 – lest

+0

太棒了,謝謝! – rugbert