Как лучше всего настроить представление редактирования, в котором вы сопоставляете что-то с другими вещами из очень больших коллекций? - PullRequest
0 голосов
/ 26 октября 2009

У меня есть вопрос дизайна. Надеюсь, что это не ленивая попытка.

Я пишу простое бухгалтерское приложение: в бухгалтерской книге много счетов, в каждой учетной записи много транзакций и т. Д.

Учет двойной записи требует сопоставления транзакций с другими транзакциями, поэтому у меня есть отдельная модель, называемая 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.

Простое поле множественного выбора, заполненное набором несопоставленных транзакций, здесь не может быть и речи, поскольку у нас легко могут быть сотни или тысячи под рукой.

Я не хочу изобретать велосипед здесь. Является ли лучший подход к оформлению заказа? Любые указатели, предложения будут оценены.

Само приложение здесь , если вы хотите увидеть больше кода.

1 Ответ

0 голосов
/ 26 октября 2009

Я считаю, что несколько ящиков выбора похожи на скоростную трассу в продуктовом магазине. 8 штук или меньше.

Рассматривали ли вы страницы флажков для несопоставленных элементов бухгалтерской книги?

Разбейте их на элементы, содержащие разумное количество флажков за раз, скажем, 50. Убедитесь, что все флажки во всех погружениях являются частью одного массива флажков. Визуализируйте их все сразу, но присвойте всем страницам классы в зависимости от их видимости. Затем добавьте несколько страниц JavaScript, список ссылок на функции, которые удаляют видимый класс и добавляют его на страницу, связанную со ссылкой.

CSS:

.invisible{
  display:none;
}

Сгенерированный HTML

<div id="ledger_items_page_1" class="visible">
 First set of checkboxes
</div>
<div id="ledger_items_page_2" class="invisible">
 Second set of checkboxes
</div>

Пример нумерации страниц.

<%= link_to_function("page 3", 
  "$('.visibile').removeClassName('visibile').addClassName('invisible'); 
  $('ledger_items_page_3').removeClassName('invisible').addClassName('visible');") %>

Не мешало бы отобразить список выбранных элементов бухгалтерской книги в обновленном списке для каждого из флажков, что позволяет напомнить пользователю о том, что они выбрали, если проверенные элементы бухгалтерской книги не включены текущая страница. Что-то, что работает подобно тому, как StackOverflow позволяет вам управлять фильтрами вопросов ваших интересных тегов.

Учитывая большую зависимость от javascript, вы бы запретили пользователям noscript использовать это действие или заставили бы найти другой способ отображения вещей.

В конце вы отправляете свою форму, как обычно.

  • N.B .: Стандарт W3C неясен при отправке элементов формы с отображением: нет. Но, насколько мне известно, все основные браузеры поддерживают это поведение.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...