在 Rails 次观看中打破用户输入的长词
Breaking long words from user input in Rails views
假设用户填写了他的个人资料 "About" 部分,其中有一个很长的 "aaaaaaaaaaaaaaa......" 单词,它破坏了站点标记。现在,这个词需要打破。
一般有两种方法。我可以写一个 Rails 助手来完成这项工作,它会产生类似(此处为 HAML)
的结果
.about= break_long_words(@user.about)
在我看来,或者我可以使用 css 并说:
.about { word-break: break-all; }
然而,问题是这两个选项都需要我在我的视图中遍历太多地方(我输出用户在字段中输入一次的内容)并且我需要插入适当的 class 名称或调用 break_long_words
助手!我不记得所有这些地方了。
不幸的是,我也不能使用 body { word-break: break-all }
因为它的行为真的很奇怪,在奇怪的地方打破了相当短的单词。
理想情况下,我只想列出模型中从视图调用时需要断字的所有字段。如何完成这项任务?
您可以考虑使用带有 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
,它应该会覆盖视图中呈现的值。
假设用户填写了他的个人资料 "About" 部分,其中有一个很长的 "aaaaaaaaaaaaaaa......" 单词,它破坏了站点标记。现在,这个词需要打破。
一般有两种方法。我可以写一个 Rails 助手来完成这项工作,它会产生类似(此处为 HAML)
的结果.about= break_long_words(@user.about)
在我看来,或者我可以使用 css 并说:
.about { word-break: break-all; }
然而,问题是这两个选项都需要我在我的视图中遍历太多地方(我输出用户在字段中输入一次的内容)并且我需要插入适当的 class 名称或调用 break_long_words
助手!我不记得所有这些地方了。
不幸的是,我也不能使用 body { word-break: break-all }
因为它的行为真的很奇怪,在奇怪的地方打破了相当短的单词。
理想情况下,我只想列出模型中从视图调用时需要断字的所有字段。如何完成这项任务?
您可以考虑使用带有 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
,它应该会覆盖视图中呈现的值。