0

假设用户填写了他的个人资料“关于”部分,并且其中有一个很长的“aaaaaaaaaaaaaaaa......”单词,它破坏了站点标记。现在,这个词需要被打破。

一般来说,有两种方法可以做到这一点。我可以编写一个 Rails 助手来完成这项工作,它会产生类似(HAML here)的结果

.about= break_long_words(@user.about)

在我看来,或者我可以使用 css 并说:

.about { word-break: break-all; }

然而问题是这两个选项都要求我在我的视图中经过很多地方(我输出用户在字段中输入的内容一次),我需要插入适当的类名或对break_long_words助手的调用!我不记得所有这些地方。

不幸的是,我也不能使用body { word-break: break-all },因为它的行为非常奇怪,在奇怪的地方打破了相当短的单词。

理想情况下,我只想列出模型中从视图调用时需要分词的所有字段。一个人将如何完成这项任务?

4

1 回答 1

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

于 2017-03-04T06:38:43.620 回答