Helper-nil:NilClass的未定义方法`gsub'

Har*_*M V 0 ruby ruby-on-rails

我有这个功能

application_helper.rb

def nl2br(s)
  s.gsub(/\n/, '<br/>')
end
Run Code Online (Sandbox Code Playgroud)

视图

<%= nl2br(@event.rules).html_safe %>
Run Code Online (Sandbox Code Playgroud)

错误:

nil:NilClass的未定义方法'gsub'

有时内容可以是nil这样,最好的处理方式是什么?

当我添加unless s.nil?函数时,我得到了html_safe undefined method error

mah*_*off 5

(2019年更新)

使用现代Ruby(2.3+),您可以使用安全的导航操作符

def nl2br(s)
  s&.gsub(/\n/, '<br/>')
end
Run Code Online (Sandbox Code Playgroud)

如果s为nil,s&.gsub将退回到nil,然后将其输出为空字符串。


(2015年的原始答案)

简单的技巧,只需使用OR即可设置默认值:

def nl2br(s)
  (s||'').gsub(/\n/, '<br/>')
end
Run Code Online (Sandbox Code Playgroud)

或者,由于nil.to_s求值为空字符串,因此您可以执行以下操作:

def nl2br(s)
  s.to_s.gsub(/\n/, '<br/>')
end
Run Code Online (Sandbox Code Playgroud)