How to use will_paginate with a nested resource in Rails?

I am new to Rails and am having serious problems getting will_paginate to work with a nested resource.

I have two models: Statement and Invoice. will_paginate is working on Statement, but I can't get it to work with Invoice. I know that I will do something stupid, but I can not understand it, and the examples that I found in google will not work for me.

statement.rb class Statement < ActiveRecord::Base has_many :invoices def self.search(search, page) paginate :per_page => 19, :page => page, :conditions => ['company like ?', "%#{search}%"], :order => 'date_due DESC, company, supplier' end end statements_controller.rb <irrelevant code clipped for readability> def index #taken from the RAILSCAST 51, will_paginate podcast @statements = Statement.search(params[:search], params[:page]) end I call this in the view like so, and it works: <%= will_paginate @statements %> 

But I can't figure out how to make it work for invoices:

 invoice.rb class Invoice < ActiveRecord::Base belongs_to :statement def self.search(search, page) paginate :per_page => 19, :page => page, :conditions => ['company like ?', "%#{search}%"], :order => 'employee' end end invoices_controller.rb class InvoicesController < ApplicationController before_filter :find_statement #TODO I can't get will_paginate to work wa nested resource def index #taken from the RAILSCAST 51, will_paginate podcast @invoices = Invoice.search(params[:search], params[:page]) end def find_statement @statement_id = params[:statement_id] return(redirect_to(statements_url)) unless @statement_id @statement = Statement.find(@statement_id) end end 

And I'm trying to call it like this: <% = will_paginate (@invoices)%>

The most common error message when I play with this is: "The @statements variable seems empty. Have you forgotten to pass the collection object to will_paginate?"

I do not know what the problem is, or how to fix it. Thanks for any help and guidance!

+3
source share
1 answer

Resolved -

I moved the invoice pages to the Statement controller, for example:

 def show @statement = Statement.find(params[:id]) #TODO move the :per_page stuff out to a constant @invoices = @statement.invoices.paginate :per_page => 10, :page => params[:page], :order => 'created_at DESC' respond_to do |format| format.html # show.html.erb format.xml { render :xml => @statement } end end 

and call it in a form like this (code is cut off for readability>

  <div id="pagination"> <%= will_paginate @invoices %> </div> <table> <%# @statement.invoices.each do |invoice| - shows all invoices with no pagination, use @invoices instead%> <% @invoices.each do |invoice| %> 
+5
source

Source: https://habr.com/ru/post/900458/


All Articles