В моем приложении Rails у меня есть users
, который может иметь много invoices
, который, в свою очередь, может иметь много payments
.Как сохранить записи пользователя в переменной, а затем отфильтровать их?
На мой взгляд, приборная панель у меня есть резюме всех payments
, что пользователь получил до сих пор, либо суммируется месяц, по квартал или года.
Поскольку переключение между этими 3 режимами должен быть простым и быстрым, я понял, что это было бы хорошей идеей не использования областей здесь, но вместо того, чтобы хранить все платежи пользователя в переменной и фильтровать эту переменную в зависимости от того, какой режим пользователь выбирает (месяц, квартал или год).
В дополнение к этому существует также разделение на валовой, чистой и налогооблагаемых сумм.
class Payment < ActiveRecord::Base
belongs_to :invoice
belongs_to :user
def net_amount
invoice.subtotal * percent_of_invoice_total/100
end
def taxable_amount
invoice.total_tax * percent_of_invoice_total/100
end
def gross_amount
invoice.total * percent_of_invoice_total/100
end
def self.sum_within_range(range, kind)
@sum ||= includes(:invoice => :items)
@sum.select { |x| range.cover? x.date }.sum(&:"#{kind}_amount")
end
end
class User < ActiveRecord::Base
has_many :invoices
has_many :payments
def revenue_between(range, kind)
payments.sum_within_range(range, kind)
end
end
На первый взгляд это работает, но когда пользователь редактирует один из его payment
записей, экземпляр переменной @sum
не перезагружаются.
Как это можно достичь?
Возможно, есть альтернативный/лучший подход для решения этой проблемы?
Спасибо за любую помощь.
Спасибо. Однако я не смог заставить это работать. Я продолжаю получать эту ошибку: 'uninitialized class variable @@ update in Payment' – Tintin81
Обновлено, чтобы добавить правильный инициализатор. – screenmutt
ОК, спасибо. Эта ошибка исправлена. Но он жалуется на «неопределенный метод» пользователя в этой строке: '@sum || = includes (: invoice =>: items), если @@ update [user] || @ Sum'. Извините, я до сих пор новичок в Rails. Может быть, мне не хватает чего-то действительно фундаментального здесь. – Tintin81