Nano Hash - криптовалюты, майнинг, программирование

Сохранять параметры запроса вне форума

Я работаю над формой поиска, которая имеет два различных входа: есть 1) поле поиска и несколько вариантов выбора из раскрывающегося списка и 2) несколько кнопок с предустановленными фильтрами.

Первый (поле поиска и раскрывающиеся списки) - это компонент, который представляет собой форму со всеми параметрами поиска и фильтрации внутри нее.

    <%= c :filter, :search, query_params: @table.query_params %>
      <div class="row">
        <div class="col-xs-12 col-md-3">
          <%= c :table_filter, :select,
            [
              name: :status,
              options: status_select_box(),
              operator: "eq",
              table: @table
            ]
          %>
</div>
  <% end %>

Второй, предустановленные фильтры, располагаются над полем поиска и отображают количество результатов, которые они вернут @count, и фильтр при нажатии, основанный на параметрах, переданных их назначениям @path.

На странице поиска:

   <%= render "_btn.html",
      [
        path: search_path(@conn, :index, %{mode: "eq:filter"}),
        count: @count,
        label: "Filter 1"
      ]
    %>

_btn.html.eex

<%= link to: @path, class: "btn" do %>
  <%=
   #this is pusdo code for the button, there is a bit more logic to
how it is displayed but essentially it just shows a label and the count
   @label @count

    %>
<% end %>

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


  • Что делают выпадающие списки? Почему вы хотите их сохранить? Похоже, они являются частью формы поиска, которая будет перезаписана при нажатии на предустановленные кнопки. Должны ли раскрывающиеся списки сохраняться, если я просто обновляю страницу сразу после выбора параметра? 07.10.2019
  • Выпадающие списки - это дополнительные фильтры. Допустим, одна из кнопок была в твердом переплете, а другая - в мягкой. Это широкие предустановки, но вы, возможно, захотите более детализированные, выбрав твердый переплет, скажем, в раскрывающемся списке издателя. Есть кнопка all, которая получает путь индекса (без параметров), эффективно очищая все фильтры, в противном случае все должно сохраниться. 07.10.2019
  • Что я обычно делаю в подобной ситуации, так это проверяю, что все зависимые партиалы всегда используют уже существующие параметры запроса, прежде чем добавлять те, которые относятся к партиалу. Как, например, партиал разбиения на страницы может потребовать применения параметров запроса search, order или category_id вместе со своими конкретными параметрами, такими как page. Самый простой способ добиться этого - передать карту или ключевое слово params для повторного применения к частичному, а затем просто использовать что-то вроде posts_path(@conn, :index, Map.merge(@query_params, %{page: @page})) 08.10.2019
  • Если я правильно понимаю, я считаю, что это похоже на то, что мы в итоге сделали, см. Мой ответ на @achempion для получения дополнительной информации. 21.10.2019

Ответы:


1

Я вижу несколько решений вашей проблемы.

Первый - попытаться решить вашу проблему с помощью Phoenix LiveView. Вы можете повторно отображать форму поиска после каждого действия, чтобы обновить атрибут @path для предустановленных кнопок.

Второй - определить ваши предустановленные кнопки в основной форме поиска. Затем присвойте кнопкам предварительной настройки атрибут name && value с type как submit. Затем в бэкэнде вы можете изменить атрибуты поиска на основе значения предварительно заданной кнопки, которую вы нажали (здесь связан ответ, как это сделать). Поскольку вы разместили свои кнопки в основной форме, вы также можете получить значения раскрывающегося списка.

07.10.2019
  • Было несколько проблем, которые еще больше усложнили это; но в итоге мы решили это с помощью скрытого поля выбора внутри основной формы поиска, которое обновлялось параметрами конкретного предварительно выбранного фильтра. Другие предварительно выбранные фильтры коррелировали с существующими полями выбора, поэтому они не вызывали никаких проблем. 21.10.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..