У меня есть вопрос дизайна. Надеюсь, что это не ленивая попытка.
Я пишу простое бухгалтерское приложение: в бухгалтерской книге много счетов, в каждой учетной записи много транзакций и т. Д.
Учет двойной записи требует сопоставления транзакций с другими транзакциями, поэтому у меня есть отдельная модель, называемая LedgerItemGroup, в которой много транзакций.
Очень упрощенно, мы можем считать транзакцию совпадающей, если она принадлежит LedgerItemGroup и сумма итогов всех транзакций в этой группе равна нулю.
Пока все хорошо.
Мой вопрос заключается в том, каков наилучший подход к разработке представления edit_ledger_item для несопоставленной транзакции, чтобы бухгалтер мог вручную сопоставить его с одной или несколькими другими несопоставленными транзакциями.
Вот (неполное) расположение задействованных моделей:
class LedgerAccount < ActiveRecord::Base
has_many :ledger_items
end
class LedgerItem < ActiveRecord::Base
belongs_to :ledger_account
belongs_to :ledger_item_group
def matched?
!self.ledger_item_group_id.nil?
end
end
class LedgerItemGroup < ActiveRecord::Base
has_many :ledger_items
def reconciled?
self.ledger_items.inject(0) { |sum, i| sum + i.total_amount } == 0
end
end
Кажется, это вызывает поле ввода строкового запроса, плюс что-то для разграничения диапазона данных, что затем будет динамически приводить к списку возможных совпадений. Бухгалтер, чем добавляет один или несколько в корзину сортов. Если этот флажок установлен, он составляет группу LedgerItemGroup.
Простое поле множественного выбора, заполненное набором несопоставленных транзакций, здесь не может быть и речи, поскольку у нас легко могут быть сотни или тысячи под рукой.
Я не хочу изобретать велосипед здесь. Является ли лучший подход к оформлению заказа? Любые указатели, предложения будут оценены.
Само приложение здесь , если вы хотите увидеть больше кода.