在Rails中显示两个文本体之间的差异

时间:2010-05-12 21:35:43

标签: ruby-on-rails

是否有一种简单的方法可以做到这一点 - 创建标记文本,显示两段文本之间的变化。可能是一个内置助手?看着但找不到!

4 个答案:

答案 0 :(得分:6)

您可以使用jsdifflib(http://snowtide.com/jsdifflib)之类的东西在javascript中完成客户端。

答案 1 :(得分:5)

http://github.com/pvande/differ 你可以使用它,它对字符串执行diff。您必须构建一些逻辑以将其格式化为输出就绪状态。可能在帮助器中使用Builder :: XmlMarkup。

还有: http://github.com/myobie/htmldiff

这似乎输出了标记 - 但它没有很好地记录。

就内置助手而言,我认为Rails没有任何内置功能。 有http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/Hash/Diff.html - 但与第一个插件不同,它用于哈希,而不是字符串。

答案 2 :(得分:2)

对于今天寻找答案的人来说:https://github.com/samg/diffy是最安全的选择。由于此处提到的其他宝石和图书馆已经放弃了一段时间。

答案 3 :(得分:0)

有两种方法:

1.也适用于非英语字符串

class String
  def -(other)
    s1 = self.mb_chars.downcase.chars
    s2 = other.mb_chars.downcase.chars
    s1.size >= s2.size ? s1 - s2 : s2 - s1
  end
end

> 'abcde' - 'abc'
=> ["d", "e"]
> 'abc' - 'ac'
=> ["b"]

2。 来自http://tobyho.com/2011/03/26/string-difference-in-ruby/

class String
  def -(other)
    self.index(other) == 0 ? self[other.size..self.size] : nil
  end
end

> 'abcde' - 'abc'
=> "de"
but
> 'abc' - 'ac'
=> nil