我正在尝试使用Sidekiq中的Rails truncate helper。在Sidekiq之外一切正常但在我试图处理它给我的工作时在sidekiq内部:
NoMethodError: undefined method `each_byte' for nil:NilClass
这是因为Sidekiq包含它自己的truncate方法:
http://www.rubydoc.info/gems/sidekiq/3.3.1/Sidekiq/WebHelpers:truncate
问题是它与Rails助手相比太简单了,我需要能够截断单词而不是字符。所以我试着明确地使用这个方法:
content = ActionView::Helpers::TextHelper.truncate(content.gsub(/\n/, ''), :length => 126, :separator => ' ', :omission => '', :escape => false)
但这仍然给我带来了与以前相同的错误。
此外,我还尝试将帮助程序包含在类的顶部
include ActionView::Helpers::TextHelper
但这似乎没有任何区别。任何想法如何在Sidekiq中使用Rails截断方法?
谢谢,
答案 0 :(得分:2)
只需通过Source: hide | on GitHub
上方的链接打开源代码:
def truncate(text, options = {}, &block)
if text
length = options.fetch(:length, 30)
content = text.truncate(length, options) // <--
content = options[:escape] == false ? content.html_safe : ERB::Util.html_escape(content)
content << capture(&block) if block_given? && text.length > length
content
end
end
正如您可以使用truncate
method of String看到此方法。只需使用它而不是ActionView助手。