Я сделал следующее, чтобы иметь возможность поиска по уникальным атрибутам (удаление дубликатов) с выпадающим списком выбора.
Проблема заключается в том, что при отправке поиска после первоначального поиска он прерывается.
Вид:
<%= 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(', ')
для получения результатов поиска.
Что вы думаете