css - 在 Rails View 中打破用户输入的长词

标签 css ruby-on-rails view word-break

假设用户填写了他的个人资料“关于”部分,并且其中有一个很长的“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/

相关文章:

html - 为什么添加 float :left/right to my CSS moves another div to the top?

ruby-on-rails - Rspec测试加载错误: cannot load such file -- spec_helper (LoadError)

java - Eclipse PropertySheetPage - 它可以支持多行属性吗?

android - 如何在膨胀 View 上显示上下文菜单?

ruby-on-rails - Cancan 嵌套资源限制对索引的访问

mysql - SQL查询输出 "yes"

html - 如何水平居中行内 block 元素

css - 使用媒体查询创建响应式菜单 : Menu doesn't scale

html - 在 div 的末尾淡入淡出文本?

ruby-on-rails - 在 Rails 中自动测试流程