2016-04-04 1 views
4

Dans mon application, j'ai un modèle client qui a beaucoup de paiements et de factures.Rails utilisent will_paginate avec des résultats de requête combinés

# customer.rb 
class Customer < ActiveRecord::Base 
    has_many :payments 
    has_many :invoices 
end 

# payment.rb 
class Payment < ActiveRecord::Base 
    belongs_to :customer 
end 

# invoice.rb 
class Invoice < ActiveRecord::Base 
    belongs_to :customer 
end 

Dans les clients montrent modèle Je combine toutes les factures et les paiements et les stocker dans la variable d'instance de @transactions.

class CustomersController < ApplicationController 
    def show 
    @customer = Customer.find(params[:id]) 
    payments = Payment.where(customer: @customer) 
    invoices = Invoice.where(customer: @customer) 
    @transactions = payments + invoices 
    end 

Je veux paginera @transactions en utilisant will_paginate. Cela ne fonctionne pas:

@transactions.paginate(page: params[:page]) 

Quelle est la meilleure façon d'y parvenir?

+0

Cette réponse va résoudre votre problème http://stackoverflow.com/questions/4352895/ruby-on-rails-will-paginate-an-array – Thorin

Répondre

4

La meilleure façon est de créer une troisième table de transactions avec une association polymorphique comme transactionnelle. Et paginez sur les transactions.

http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

Première association En savoir polymorphes

class Transaction < ActiveRecord::Base 
    belongs_to :transactionable, polymorphic: true 
end 

class Invoice < ActiveRecord::Base 
    has_many :transactions, as: :transactionable 
end 

class Payment < ActiveRecord::Base 
    has_many :transactions, as: :transactionable 
end 

Autre moyen qui est pas bon pour paginer les deux ou utiliser le tableau paginera.

+0

Je suis nouveau sur les rails. Pouvez-vous fournir des ressources où je peux apprendre à faire cela. – James

+0

http://guides.rubyonrails.org/association_basics.html#polymorphic-associations –