假设用户填写了他的个人资料“关于”部分,并且其中有一个很长的“aaaaaaaaaaaaaaaa......”单词破坏了网站标记。现在,这个词需要被打破。
一般来说,有两种方法可以做到。我可以编写一个 Rails 助手来完成这项工作,它会产生类似于(此处为 HAML)的结果
.about= break_long_words(@user.about)
在我看来,或者我可以使用 css 并说:
.about { word-break: break-all; }
然而,问题是这两个选项都需要我在我的 View 中遍历太多地方(我输出用户在字段中输入一次的内容)并且我需要插入适当的类名或调用 break_long_words
helper !我不记得所有这些地方。
不幸的是,我也不能使用 body { word-break: break-all }
因为它的行为很奇怪,在奇怪的地方打断相当短的单词。
理想情况下,我只想列出在从 View 调用时需要断字的模型中的所有字段。如何完成这项任务?
最佳答案
您可以考虑将装饰器与 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
,它应该覆盖 View 中呈现的值。
关于css - 在 Rails View 中打破用户输入的长词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42591812/