未定义方法“gsub”给空值:NilClass

6
我是一名初学者,正在学习Ruby on Rails。我在使用gsub时遇到了问题。每次当我进入我的商店页面列表时,都会显示 "undefined method `gsub' for nil:NilClass"。
以下是我的代码:
def self.search(search_val, page = 1)
    @search_val = search_val.gsub("'", "\\\\'")
    search_query = "store_id LIKE '%#{ @search_val }%' OR english_name LIKE '%#{ @search_val }%' OR chinese_name LIKE '%#{ @search_val }%'"
select("jos_store.id, store_id, english_name, chinese_name, store_manager, delivery_area,year, week").joins("LEFT OUTER JOIN (SELECT id as store_replenishment, store, MAX(stock_movement) AS stock_movement FROM jos_store_replenishment GROUP BY store) AS replenishment ON replenishment.store = jos_store.id").joins("LEFT OUTER JOIN jos_stock_movement ON jos_stock_movement.id = replenishment.stock_movement").where(search_query).order("year DESC, week DESC").paginate :page => page, :per_page => 15  
  end

thanks in advance

4个回答

20

在使用字符串方法时,一个好的习惯是使用.to_s


谢谢大家,但我已经找到答案了...在我的gsub之前加上“unless search_val.blank?” 例如: unless search_val.blank? @search_val = search_val.gsub("'", "\\\\'") - Lian
2
为什么提问者没有将其中一个答案标记为“已接受的答案”?至少,这些解释对我来说真的很有用! - Agat

4
您可以在 search_val 上使用 & 运算符。它允许您避免空指针异常,而无需添加其他检查或使用 to_s 将字符串转换为字符串。
因此,您将得到以下内容:
@search_val = search_val&.gsub("'", "\\\\'")

您可以在这里阅读有关安全导航操作符的更多信息:http://mitrev.net/ruby/2015/11/13/the-operator-in-ruby/

3
这意味着search_val实际上是空的。你可以通过打印search_val的值来轻松验证这一点。

0
我不确定这是否与你的情况有关,但是在执行了一些回滚和迁移之后,我也遇到了相同的 nil:NilClass 错误,提示无法找到 gsub 方法。
然后,我重新启动了服务器,问题解决了。也许对于一些通过谷歌搜索到达这个主题的人来说,这也可能是个解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接