0

Я хотел бы знать, если кто-то мог пощадить некоторый свет на этотнеопределенный метод `total_pages' для массива на acts_as_follower

я использую acts_as_follower с will_paginate

Контроллер

@products = current_user.following_shops.includes(:products).collect{|u| u.products.paginate(:page => params[:page]).order("created_at DESC")}.flatten 

вид

<table> 
     <% @products.each do |p| %> 
      <tr> 
       <td> 
       <%= image_tag p.shop.logo.url(:thumb_feed).to_s %> 
       </td> 


       <td> 
      <%= link_to(image_tag(p.f1.url(:table).to_s), product_path(p.id)) %>  
      <%= link_to p.name, product_path(p.id)%> 

          </td> 

    </tr> 


    <% end %> 


     </table> 

<%= will_paginate(@products) %> 

но рельсы продолжают выплюнуть эту ошибку:

неопределенный метод `total_pages' для

ответ

2

Метод #paginate создает декорированную коллекцию WillPaginate, которая включает в себя информацию, необходимую для пролистывания результатов. Вы просто создаете массив, собирая массивы WillPaginate и сглаживая их в нормальный массив, поэтому у них не будет всех необходимых украшений для разбиения на страницы. Быстро, грязный, и неправильный ответ здесь, чтобы взять продукты массива, и завернуть его в качестве разбитой на страницы коллекции:

@products = WillPaginate::Collection.create(current_page, per_page, @products.length) do |pager| 
    pager.replace @products 
end 

Вы делаете довольно необычную операцию здесь, и это будет очень неэффективно; похоже, вы хотите получить все продукты во всех магазинах для данного пользователя, а также через страницы, верно? Если это так, вы, вероятно, захотите использовать другой подход.

Во-первых, создать has_many :through ассоциацию, чтобы добраться до этих продуктов через следуют магазины ассоциации (этот синтаксис может потребоваться некоторая работа, моя ActiveRecord ржавый):

class User 
    has_many :following_products, through: :following_shops, class_name: "Product" 
end 

Тогда постраничной, что ассоциация:

current_user.following_products.order("created_at DESC").paginate(page: params[:page]) 

Это не позволяет вам выбирать и перебирать список магазинов всего на каждой странице, разбираясь на страницы, делая их более выразительными.

+0

спасибо очень много Крис :) – dcalixto

+0

эй Крис! сегодня выполнили ваши шаги, а модель User выплевывала проблему ассоциации с помощью следующих_shops! так что я должен был изменить и поставить источник! но теперь paginate переплетает проблему current_page – dcalixto