2009-09-23 2 views
3

Я новичок в Rails, и у меня большие проблемы с получением will_paginate для работы с вложенным ресурсом.Как использовать will_paginate с вложенным ресурсом в Rails?

У меня есть две модели, заявление и счет-фактура. will_paginate работает над Statement, но я не могу заставить его работать с Invoice. Я знаю, что я делаю что-то глупое, но я не могу понять это, и примеры, которые я нашел в google, не будут работать для меня.

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

Но я не могу понять, как заставить его работать для счетов-фактур:

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 w a 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 

И я стараюсь называть это так: <% = will_paginate (@invoices)%>

Наиболее распространенное сообщение об ошибке, так как я играю с этим: «Переменная @statements кажется пустой. Забыли ли вы передать объект коллекции для will_paginate?»

У меня нет понятия, в чем проблема, или как ее исправить. Спасибо за любую помощь и руководство!

ответ

5

решаемая -

я переехал счета-фактуры PAGINATION в контроллер ничего о ней, например:

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 

и назвать его в представлении, как это (код обрезается для читаемости>

<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| 
    %> 
Смежные вопросы