Прежде чем начать, я прошу прощения за плохой заголовок, но я не смог придумать тот, который удовлетворительно описывает мой вопрос.Если вы придумаете лучший заголовок, я с удовольствием переключусь.
Предположим, у меня есть модель Account
и модель Transaction
, и я хотел бы реализовать метод Account#days_since_balance_was_atleast
, взяв суммукак его единственный параметр.Какой эффективный способ сделать это?
Вот пример кода:
class Transaction < ActiveRecord::Base
validates_presence_of :account_id, :created_at, :amount
belongs_to :account
# Some logic to update account balance at creation...
end
class Account < ActiveRecord::Base
validates_presence_of :balance
has_many :transactions
def days_since_balance_was_atleast(sum)
#How should I implement this?
end
end
Должен ли я использовать какой-нибудь умный фрагмент SQL или, возможно, ActiveRecord :: Calculations?Загрузка всех транзакций и возврат назад вручную кажется очень плохой идеей (тем более что транзакций может быть много).И если я застрял с последним подходом, как вы думаете, было бы разумно извлекать транзакции партиями.
Что он должен производить (Обновлено):
# We have the following transactions
# (time is unimportant for the result unless it is 00.00)
# Days ago 0 1 2 3 4 5 6 7
# Amount -20 10 -60 -30 50 50 -100 100
account.balance == 0 # true
days_since_balance_was(100) == 3 # true
Итак, как бы вы решили эту проблему?