仅显示字符串中的几个字符

时间:2014-01-19 13:55:35

标签: ruby-on-rails ruby

我有这个简单的帮手(在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

为什么我收到此错误?这两个参数都存在并且是整数。

4 个答案:

答案 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)

这意味着textnil。使用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