【问题标题】:undefined method `gsub' for nil:NilClassnil:NilClass 的未定义方法“gsub”
【发布时间】:2012-07-16 05:24:46
【问题描述】:

我是 ruby​​ on rails 的新手。我遇到了 gsub 的问题。我每次去我的商店页面列表时都会显示“未定义的方法 `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

提前致谢

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.1


    【解决方案1】:

    当您使用字符串方法时,一个好的做法是使用.to_s

    【讨论】:

    • 谢谢大家,但我已经找到了答案……我在我的 gsub 之前放了一个“除非 search_val.blank?”。除非search_val.blank? @search_val = search_val.gsub("'", "\\\\'")
    • 为什么所有者不将其中一个答案标记为实际接受的答案?至少,这些解释真的对我有用!
    【解决方案2】:

    您可以在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 的值来轻松验证这一点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-01
        • 2011-07-27
        • 2013-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多