我有这个简单的帮手(在Rails应用程序中):
def shortener(text, text_length = nil)
if text_length.nil?
text_size = 60
else
text_size = text_length
end
#text_size = 60 if text_length.nil? => return the same error as above
if text.length.to_i > text_size.to_i # HERE IS THE ISSUE
return "#{text[0..(text_size-5)]}..."
else
return text
end
end
但是,我收到此错误:
nil的未定义方法`length':NilClass
为什么我收到此错误?这两个参数都存在并且是整数。
答案 0 :(得分:7)
因为您使用的是Rails,我建议您使用Rails内置助手truncate
truncate("And they found that many people were sleeping better.", length: 25, omission: '... (continued)')
有关详细信息,请参阅http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-truncate
答案 1 :(得分:4)
如果由于某种原因你想要推出自己的方法而不是使用内置的truncate
:
def shortener(text = "", text_length = 60)
"#{text[0...text_length]}..."
end
答案 2 :(得分:0)
这意味着text
是nil
。使用caller
找出原因。
答案 3 :(得分:0)
您收到该错误是因为text
已作为nil
传递。
为了使其在rails中表现得像普通文本渲染器,您可能希望这样做:
def shortener(text, text_length = 60)
text ||= ''
if text.length.to_i > text_length.to_i
return "#{text[0..(max_text_length-5)]}..."
else
return text
end
end