Je travaille sur une application de budget simple en utilisant Sinatra et DataMapper dans Ruby.Appel agrégé chaîné à travers l'association dans DataMapper (ruby)
Je veux obtenir la somme de toutes les transactions pour tous les comptes de revenu au cours des 30 derniers jours.
Quelque chose comme Account.income_accounts.account_entries.sum(:amount, :transaction_date.gte => Date.today - 30)
devrait fonctionner. Au lieu de cela, la condition de limitation sur transaction_date
est ignorée, renvoyant la somme du montant pour toutes les entrées pour tous les comptes de revenus.
Compte tenu de ce qui suit:
class Account
include DataMapper::Resource
has n, :account_entries
property :id, Serial
property :name, String
property :acct_type, String
def self.income_accounts
all(:acct_type => 'Income')
end
end
class AccountEntry
include DataMapper::Resource
belongs_to :account
property :id, Serial
property :account_id, Integer
property :description, String
property :amount, BigDecimal
property :transaction_date, DateTime
end
Je suis bien dm-aggregates
NÉCESSITANT. Je suis nouveau à DataMapper. Si c'est important, j'utilise une base de données sqlite3. Je ne veux vraiment pas avoir recours à l'utilisation de rubis pour additionner les résultats. Il est également incorrect de recourir à l'exécution de SQL brut pour ce type de requête agrégée simple.
Quelqu'un peut-il nous éclairer à ce sujet? J'aimerais être pointé dans la bonne direction en ce qui concerne les finders enchaînés dans DataMapper, en particulier avec les agrégats. Ma spéléologie dans l'API et le site DataMapper n'a pas encore donné de solution.
Date.today - 30 me donne 2009-09-24 comme prévu. – kEND