неопределенный метод `gsub 'для nil: NilClass -> Параметры запроса: Нет - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь создать форму поиска и фильтрации. Все работает хорошо, за исключением случаев, когда я обновляю sh страницу, я получаю сообщение об ошибке 'неопределенный метод `gsub' для nil: NilClass '

, когда у меня есть URL, как это:

-> http://localhost: 3000 / мест (ошибка)

-> http://localhost: 3000 / мест? Utf8 =% E2% 9C% 93 & query = & filter = Select + Filter & commit =% F0% 9F% 94% 8E (работает)

-- VIEW --
<%= form_for :search, url: places_path, class: "search-form", method: :get do %>
    <%= text_field_tag :query, params[:query],
          class: "search-input form-control placeholder-search",
          placeholder: "Location.."%>
    <%= select_tag "filter", options_for_select(['Select Filter',
                  'Cafe',
                  'Coffee Shop',
                  'Art Gallery']), class:'custom-select' %>
    <%= submit_tag "?"  %>
  <% end %>

-- CONTROLLER -- 
@places = policy_scope(Place)
    @places = Place.all
    query = params[:query]
    @places = query.present? ? Place.global_search(query) : Place.all

    if params[:filter] == 'Select Filter'
      @places = results
    else
      # 'Art Gallery' -> 'Art_Gallery' -> 'art_gallery' -> :art_gallery
      symbol = params[:filter].gsub(/ /, '_').downcase!.to_sym
      # @places = results.where(:art_gallery => true)
      @places = @places.where(symbol => true)
    end

1 Ответ

1 голос
/ 17 апреля 2020

params[:filter] - это nil, и поэтому вы не можете набрать gsub для него. Пустой фильтр, кажется, попадает в ту же категорию, как если бы фильтр был Select Filter, поэтому я бы изменил код на:

if params[:filter].blank? || params[:filter] == 'Select Filter'
  @places = results
else
  # 'Art Gallery' -> 'Art_Gallery' -> 'art_gallery' -> :art_gallery
  symbol = params[:filter].gsub(/ /, '_').downcase!.to_sym
  # @places = results.where(:art_gallery => true)
  @places = @places.where(symbol => true)
end
...