用动态链接替换子字符串

时间:2015-06-24 13:09:22

标签: ruby-on-rails hyperlink

在我的应用中,我存储了电子邮件。

我想在文本中动态解析这些电子邮件地址,并用链接替换它们(以便我们通过应用程序发送电子邮件)。

e.g。 @ email.body =“嗨,汤姆,请在jerry@cheese.com给我留言。”

我想要某种帮助器,将其动态转换为:

@ email.sanitized_body

  

“嗨,汤姆,请在#{link_to”电子邮件地址“给我发邮件,发送电子邮件至__电子邮件地址”(“jerry@cheese.com”)}。“

我一直在几个圈子里。 例如在模型中     课程电子邮件

def sanitized_body
  text = self.body
  emails = text.scan(/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i)
  emails.each do |email|
    text.gsub!("jerry@cheese.com", helper.link_to("email",    "http://www.google.com"))
  end
  text
end

我确信有一种合理的方法可以做到这一点,可能还有一个帮手,但是不能很好地解决这个问题......

module EmailsHelper

def sanitized_body(email_body)
  text = email_body
  emails = text.scan(/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i)
  emails.each do |email|
    text.gsub!("jerry@cheese.com", "#{link_to("email", "http://www.google.com")}")
  end
  text
end

end

几乎到了我。但是显示时文本在字符串中显示为文本。

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:1)

您应该使用html_safe将文字呈现为HTML代码,而不是简单的字符串。

module EmailsHelper

  def sanitized_body(email_body)
    text = email_body
    emails = text.scan(/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i)
    replace_text = "You text %s" % helper.link_to("email", "http://www.google.com")
    emails.each do |email|
      text.gsub!("jerry@cheese.com", replace_text.html_safe)
    end
    text
  end

end