0

I have 2 non nested models, User and Record. The goal is to paginate the @user.records called @records at users/show

Here is the Record part:

at app/models/record.rb

class Record < ActiveRecord::Base    

default_scope lambda { order('records.created_at DESC') }
paginates_per 48

end

I am using Kaminari at records/index and works great. Problem is to use it at users/show

Here the app/controllers/users_controller.rb

def show

   @user = User.find(params[:id])
   @records = @user.records.page params([:page])

   # Not working alternative:
   # @records = @user.records.page(params[:page]).per(48)
end

Here is the view that triggers the display, is the listing rendered inside users/show...

<% @records.each do |record| %>
   <%= link_to (image_tag record.thumbnail.url(:list)), record %>
   <%= link_to record.name, record %>
<% end %>
<%= paginate @records %>

Errors are very interesting. As it is, error is:

No route matches {:action=>"show", :controller=>"users", :controllers=>{"registrations"=>:registrations}, :id=>"1", :page=>nil}

Meaning paginate @records is building a request to Active Record that hopes to find an action I do not have in that controller (I am using devise). So at Kaminari instructions says is possible to pass the params, like this:

<%= paginate @records, :params => { :controller => 'foo', :action => 'bar' }, :remote => true  %>

Then the error becomes like this:

No route matches {:action=>"remote_records_pagination", :controller=>"records", :controllers=>{"registrations"=>:registrations}, :id=>"1", :page=>nil}

I have a remote_recors_pagination defined at records_controller, renders records_paginate_remotely.js, but the pagination method does not find it. Why it keeps showing :controllers registrations?

Finally, to change the view like this:

<%= paginate @user.records %>
   <% @user.records.each do |record| %>
       <%= link_to (image_tag record.thumbnail.url(:list)), record %>
       <%= link_to record.name, record %>
    <% end %>
<% end %>

Produces an undefined method error.

Should not the example be working with or without js file? Any help?

Thanks.

Dieglock
  • 169
  • 1
  • 16

1 Answers1

0

I found a solution. I am posting an answer because the problem was on routes and the mix with devise, common combo that more people may find.

So, routes was like this:

devise_for :users
  resources :users, only: :show, , :controllers => { :registrations => :registrations } do
    member do
      get :following, :followers
    end
  end

To change it to this:

devise_for :users, :controllers => { :registrations => :registrations }
  resources :users, only: :show do
    member do
      get :following, :followers
    end
  end

allows the paginate command interact with Active Record normally. Devise first test seems ok.

Dieglock
  • 169
  • 1
  • 16