在模型方法中访问截断方法

时间:2019-06-25 06:35:10

标签: ruby-on-rails

truncate旨在用作视图助手。但是,如果需要调用模型方法来创建供控制器使用的字符串(最终目的是将字符串传送给动态生成的javascript)

 "#{title}" + " " + "#{main_text.truncate(length: 120)}" 

undefined method 'truncate' for nil:NilClass而失败 由于"#{title}" + " " + "#{main_text}"呈现正确,因此该错误具有误导性。

然后一种效果如何截断?

2 个答案:

答案 0 :(得分:2)

main_textnil,这就是您收到错误消息的原因

undefined method 'truncate' for nil:NilClass

要确保您处理nil,可以使用安全的导航操作符

"#{title} #{main_text&.truncate(120)}"

这将适用于ruby 2.3 +

如果您使用的是ruby <2.3,则可以使用

"#{title} #{main_text.try(:truncate, 120)}"

答案 1 :(得分:1)

即使您将SELECT SENDER,SUBJECT,SDATE,MAIL_NO FROM MAIL 传递给nil助手,该视图仍应呈现...即这应该不会引发错误。

truncate

因此,请尝试<%= truncate(nil, length: 120) %>

您似乎正在尝试使用Ruby截断而不是Rails视图帮助器...这就是为什么它抛出<%= truncate(main_text, length: 120) %>的原因。 但是... undefined method 'truncate' for nil:NilClass仍然是零,您将需要弄清楚这是否是一个问题。

main_text正确渲染而言...很可能不是。与上述类似,您可以说

"#{title}" + " " + "#{main_text}"

它仍然会正确显示空白。