Удаление элементов из ответа JSON, которые уже были выбраны - PullRequest
0 голосов
/ 11 апреля 2020

В моем приложении на Rails 6 есть модель корректировки инвентаря, которая заполняет раскрывающийся список для выбора товаров для инвентаризации. Проблема в том, что я хочу убедиться, что дубликаты продуктов не выбраны, чтобы избежать ошибок инвентаря. Каждый продукт выбирается с помощью раскрывающегося списка, который генерируется с помощью вызова JSON в контроллере:

# Inventory_Adjustment_Batches_Controller.rb
def json_dropdown_products
  @pagy_products, @products = pagy_countless(Product.ransack(model_number_or_supplier_part_number_or_description_cont: params[:term]).result(distinct: true), overflow: :empty_page)
end

# json_dropdown_products.json.jbuilder
json.items do
  json.array!(@products) do |p|
    json.preferred_sku p.preferred_sku
    json.description p.description
    json.quantity_on_hand p.quantity_on_hand
    json.id p.id
  end
end

Для каждого генерируемого раскрывающегося списка он вызывает json через этот select2 javascript:

$('.productSearch').select2({
  selectOnClose: true,
  allowClear: true,
  placeholder: "Select Product...",
  ajax: {
    url: "/json_dropdown_products.json",
    dataType: "json",
    type: "GET",
    processResults: function (data, params) {
      params.page = data.page || 1;
      return {
        results: $.map(data.items, function (item) {
          return {
            text: item.preferred_sku + " - " + item.description,
            id: item.id,
            quantity_on_hand: item.quantity_on_hand
          };
        }),
        pagination: {
          more: data.current_page
        }
      };
    },
    cache: true
  },
  templateSelection: function(container) {
      $(container.element).attr("data-quantity", container.quantity_on_hand);
      return container.text;
  }
});

Есть ли способ динамического отключения массива идентификаторов продукта в ответе json при создании новых записей продукта?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...