我编写了一个简单的小函数,每隔60秒刷新一次页面,以实现'Time.now.strftime'功能。但是,当我执行搜索并最终使用搜索结果刷新页面时,我得到以下错误,我无法弄清楚:
无法将nil转换为String
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"
任何帮助将不胜感激 感谢
答案 0 :(得分:0)
如果您未在请求中提供search_string
参数,请考虑会发生什么:
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
更好的是,只需检查参数中的key
:
if params.key?(:search_string)
# do search
else
# panic
end
答案 1 :(得分:0)
你的参数search_string
是nil
我会修改fuzzy_search
def self.fuzzy_search(search_string)
return [] unless search_string
self.find(:all, :conditions => ["title LIKE ?", "%#{search_string}%"])
end
如果发生此更改,@products
将为空,您的代码将遇到@products.empty?
条件并闪烁错误。
答案 2 :(得分:0)
如果以稍微不同的方式连接字符串,则搜索字符串为nil无关紧要。试试这样,而不是:search_string = "%#{ search_string }%"
。这将导致#{}
中的任何内容被强制转换为字符串。
答案 3 :(得分:0)
错误是由字符串“%”尝试连接到NilClass(nil)引起的。
最快的解决方法是执行以下操作。
第37行的代码:
search_string = "%" + search_string + "%"
应更改为:
search_string = "%#{search_string}%"
凯尔建议重构该方法也是一个很好的建议。