Ruby on rails rails 5.x:将nofollow添加到';消毒';

Ruby on rails rails 5.x:将nofollow添加到';消毒';,ruby-on-rails,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 5,我正在开发一个Rails应用程序,其HAML模板经常使用一个名为sanitize的例程。我已经从上下文推断出,这个例程清理了用户控制的HTML。例如: # views/feed_items/_about.html.haml %h3 Summary: .description = sanitize @feed_item.description 我想让这个例程在所有出站链接中添加'rel=nofollow',除了它已经在做的事情之外。最直接的方法是什么 注意:我没有任何运气找到这个方法的定义,

我正在开发一个Rails应用程序,其HAML模板经常使用一个名为
sanitize
的例程。我已经从上下文推断出,这个例程清理了用户控制的HTML。例如:

# views/feed_items/_about.html.haml
%h3 Summary:
.description
  = sanitize @feed_item.description
我想让这个例程在所有出站链接中添加'rel=nofollow',除了它已经在做的事情之外。最直接的方法是什么


注意:我没有任何运气找到这个方法的定义,或者它的官方配置旋钮。供应商目录中有两个不同的HTML Sanitarizer gem,我甚至不知道使用了哪一个。这是一个大型、复杂的web应用程序,我没有编写,我几乎不了解Ruby,更不用说Rails对它的所有扩展了。请假设我不知道任何你认为显而易见的事情。

如果存在
rel
标签,消毒剂将去除它们

我遇到了一个类似的问题,并在
ApplicationHelper
模块中添加了一个附加的帮助程序方法-
clean\u links
,并在清理内容后将其命名为

# application_helper.rb
def clean_links html
  html.gsub!(/\<a href=["'](.*?)["']\>(.*?)\<\/a\>/mi, '<a href="\1" rel="nofollow">\2</a>')
  html.html_safe
end
#应用程序_helper.rb
def clean_链接html
html.gsub!(/\')
html.html_安全
结束
此方法查找所有
标记,并添加rel=“nofollow”。
html\u safe
方法是必需的,否则html将显示为字符串(它已被清除)

此解决方案平等地对待所有链接,因此如果您只希望指向域外的链接使用此方法,则必须相应地更新正则表达式

在您看来:


因此,首先对内容进行消毒,然后在显示链接之前添加rel=“nofollow”标记。

实际上有一种内置方式:

清理“您的输入”,洗涤器:丝瓜::洗涤器::NoFollow.new
为了添加“rel=nofollow”,您是否考虑使用“monkey-patch”清理方法?@SebastianPalma嗯,理想情况下会有一个受支持的机制来配置它,或者至少挂接它,但是如果我必须对它进行monkey-patch,这仍然比修改几十个HAML文件要好。