在 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,它应该会覆盖视图中呈现的值。