【问题标题】:undefined method `gsub' for nil:NilClass -> Request Parameters: Nonenil 的未定义方法“gsub”:NilClass -> 请求参数:无
【发布时间】:2020-04-17 13:45:58
【问题描述】:

我尝试创建搜索和过滤表单。一切正常,除了当我刷新页面时,我得到一个错误'undefined method `gsub' for nil:NilClass'

当我有这样的网址时:

->http://localhost:3000/places(错误)

->http://localhost:3000/places?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

【问题讨论】:

  • params[:filter] 在第一个网址上为零,这就是您收到此错误的原因。您需要验证它是否为 nil 或设置默认值,否则会触发此错误。

标签: ruby-on-rails ruby gsub


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    相关资源
    最近更新 更多