Ruby on rails Ruby on Rails-无法将nil转换为字符串
我编写了一个简单的小函数,每60秒刷新一次页面,以实现“Time.now.strftime”函数。但是,当我执行搜索并最终使用搜索结果刷新页面时,我发现以下错误,我无法找出: 无法将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
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关于重构方法的建议也是一个很好的建议。这将导致返回所有记录,用于空搜索,而其他建议的解决方案不会返回任何内容。