Je suis nouveau sur Rails et j'ai de la difficulté à obtenir will_paginate pour travailler avec une ressource imbriquée.Comment utiliser will_paginate avec une ressource imbriquée dans Rails?
J'ai deux modèles, Statement et Invoice. will_paginate fonctionne sur Statement, mais je n'arrive pas à le faire fonctionner sur Invoice. Je sais que je ferais quelque chose de stupide, mais je ne peux pas le comprendre et les exemples que j'ai trouvés sur google ne fonctionneront pas pour moi.
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 %>
Mais je ne peux pas comprendre comment le faire fonctionner pour les factures:
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
Et j'essayer de l'appeler comme ceci: <% = will_paginate (@invoices)%> Le message d'erreur le plus courant, tel que je le lis, est: "La variable @statements semble être vide Avez-vous oublié de passer l'objet de collection pour will_paginate?"
Je ne sais pas quel est le problème, ou comment le réparer. Merci pour toute aide et conseil!