Я работаю над простым бюджетным приложением, использующим Sinatra и DataMapper в Ruby.
Я хочу получить сумму всех транзакций по всем счетам доходов за последние 30 дней.
Что-то вроде Account.income_accounts.account_entries.sum(:amount, :transaction_date.gte => Date.today - 30)
должно работать. Вместо этого условие ограничения на transaction_date
игнорируется, возвращая сумму суммы для всех записей для всех счетов дохода.
Учитывая следующее:
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
Я правильно требую dm-aggregates
. Я новичок в DataMapper. Если это имеет значение, я использую базу данных sqlite3. Я действительно не хочу прибегать к помощи ruby для подведения итогов. Также кажется неправильным прибегать к выполнению необработанного SQL для этого типа простого агрегированного запроса.
Может кто-нибудь пролить свет на это? Я хотел бы, чтобы меня указывали в правильном направлении относительно цепочечных искателей в DataMapper, особенно с агрегатами. Мое знакомство с API и сайтом DataMapper пока не дало решения.