Форма поиска Rails через массивы не работает при второй попытке поиска - PullRequest
0 голосов
/ 21 сентября 2019

Я сделал следующее, чтобы иметь возможность поиска по уникальным атрибутам (удаление дубликатов) с выпадающим списком выбора.

Проблема заключается в том, что при отправке поиска после первоначального поиска он прерывается.

Вид:

<%= form_tag vendor_orders_path, :method => 'get' do %>
  <%= collection_select(:search, params[:search], @vendor_line_items, :store_title, :store_title, {}, {class: "form-control-sm col-5"})%>
  <%= submit_tag "Search", :name => nil, class: "btn btn-primary btn-sm" %>

Модель:

def self.line_item_search(search)
    scope = joins(:line_items)
    line_items = scope.where(line_items: { id: LineItem.where(store_title: "#{search.join(', ')}") })
    line_items
  end

Примечание : .join(', ') Это позволяет мнедля поиска через параметр Array.

Контроллер:

if params[:search]
    @orders = Order.line_item_search(params[:search]).joins(:line_items).where(line_items: {vendor_id: @vendor.id})
end

Ошибки:

Это все работает на первомпоиск.Но когда я выполняю поиск дважды (после успешного поиска), он разбивается со следующими параметрами и ошибками:

Parameters: {"utf8"=>"✓", "search"=>{"\"Copy of Copy of t-shirt 123\""=>"Copy of Copy of t-shirt 123"}}

NoMethodError (undefined method `join' for #<ActionController::Parameters:0x00007f45a47f9428>):

Указывает, что ошибка находится в строке 73 в контроллере:

@orders = Order.line_item_search(params[:search]).joins(:line_items).where(line_items: {vendor_id: @vendor.id})

Вопросы и возможные альтернативы:

Как очистить предыдущий поиск в URL?

Есть ли лучший способ получения уникальных атрибутовиз модели LineItem?В прошлом, при использовании форм поиска, у меня никогда не было этой проблемы, когда она просто использовала строку или целое число.Я полагаю, что очистка результатов поиска не является лучшим решением, поскольку просто получение списка строк, для которых не нужно использовать .join(', ') для получения результатов поиска.

Что вы думаете

Ответы [ 2 ]

0 голосов
/ 22 сентября 2019

Использование:

  <%= select_tag :search, options_from_collection_for_select(@vendor_line_items, :store_title, :store_title, params[:search]), class: "form-control-sm col-5" %>

Вместо collection_select решены все проблемы.Он превратил выбор в строку, без необходимости использования .join (',') в модели.И это позволило поиск после поиска

0 голосов
/ 22 сентября 2019

Я думаю, что ваша проблема связана с вашей формой.Почему вы вводите второй аргумент params [: search] в collection_select?

См. https://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select, какие аргументы вам нужны и где

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