Ruby on rails Ruby on Rails-无法将nil转换为字符串

Ruby on rails Ruby on Rails-无法将nil转换为字符串,ruby-on-rails,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3.2,我编写了一个简单的小函数,每60秒刷新一次页面,以实现“Time.now.strftime”函数。但是,当我执行搜索并最终使用搜索结果刷新页面时,我发现以下错误,我无法找出: 无法将nil转换为字符串 app/models/product.rb:37:in `+' app/models/product.rb:37:in `fuzzy_search' app/controllers/products_controller.rb:92:in `search' def self.fuzzy_sear

我编写了一个简单的小函数,每60秒刷新一次页面,以实现“Time.now.strftime”函数。但是,当我执行搜索并最终使用搜索结果刷新页面时,我发现以下错误,我无法找出:

无法将nil转换为字符串

app/models/product.rb:37:in `+'
app/models/product.rb:37:in `fuzzy_search'
app/controllers/products_controller.rb:92:in `search'

def self.fuzzy_search(search_string)
    (LINE 37)   search_string = "%" + search_string + "%"
        self.find(:all, :conditions => ["title LIKE ?", search_string])
    end

(LINE 92) @products = Product.fuzzy_search(params[:search_string])
        if @products.empty?
            flash.now[:alert] = "No records found - displaying all records..."
            @products = Product.find :all, :order => 'title'
        end
        render :action => "index"
任何帮助都将不胜感激
谢谢

请考虑如果在请求中未提供
搜索字符串
参数会发生什么:

search_string = params[:search_string] # nil
与其使用
nil
参数运行搜索,不如处理意外的空值:

unless params[:search_string].nil?
  @products = Product.fuzzy_search(params[:search_string])
else
  abort('Search with something!') # don't actually do this
end
更妙的是,只需检查params中的

if params.key?(:search_string)
  # do search
else
  # panic
end

您的参数
search\u string
nil

我会修改
模糊搜索

def self.fuzzy_search(search_string)
  return [] unless search_string
  self.find(:all, :conditions => ["title LIKE ?", "%#{search_string}%"])
end

通过此更改,
@products
将为空,您的代码将达到
@products.empty?
条件并闪烁一个错误。

如果您的字符串连接方式稍有不同,则搜索字符串为零并不重要。改为这样试试:
search_string=“%{search_string}%”
。这将导致将
#{}
中的任何内容转换为字符串。

该错误是由字符串“%”试图连接到NilClass(nil)引起的

最快的修复方法是执行以下操作

第37行的代码:

search_string = "%" + search_string + "%"
应改为:

search_string = "%#{search_string}%"

Kyle关于重构方法的建议也是一个很好的建议。

这将导致返回所有记录,用于空搜索,而其他建议的解决方案不会返回任何内容。