假设用户填写了他的个人资料“关于”部分,并且其中包含一个非常长的“aaaaaaaaaaaaaaa ......”字样,这会破坏网站标记。现在,这个词需要被打破。
通常,有两种方法可以做到这一点。我可以编写一个Rails帮助器来完成这项工作,它会产生类似的东西(HAML)
.about= break_long_words(@user.about)
在我的观点中,或者我可以使用CSS并说:
.about { word-break: break-all; }
然而问题是这两个选项都要求我在我的视图中经历很多地方(我将用户输入的内容输出到一个字段中)并且我需要插入适当的类名或调用{{ 1}}帮手!我不记得所有这些地方。
不幸的是,我也不能使用break_long_words
,因为它表现得很奇怪,在奇怪的地方打破了相当短的单词。
理想情况下,我只想列出模型中从视图调用时需要断字的所有字段。如何完成这项任务呢?
答案 0 :(得分:1)
您可以考虑使用带有Draper gem的装饰器。
作为一个非常粗略的例子:
# Note, name as #{ClassName}Decorator
class UserInputDecorator < Draper::Decorator
delegate_all
LONG_ATTRS = %i(
attr1
attr2
).freeze
LONG_ATTRS.each do |long_attr|
define_method long_attr do
# your code to break word here
end
end
end
然后,您可以在实例上调用decorate
,它应该覆盖视图中呈现的值。