Отображение различий между двумя телами текста в Rails - PullRequest
14 голосов
/ 13 мая 2010

Есть ли простой способ сделать это - создать размеченный текст, который показывает изменения между двумя частями текста. Может быть, встроенный помощник? Посмотрел, но не смог найти!

Ответы [ 4 ]

6 голосов
/ 13 мая 2010

Вы можете сделать это полностью на стороне клиента в JavaScript, используя что-то вроде jsdifflib (http://snowtide.com/jsdifflib).

5 голосов
/ 13 мая 2010

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 голосов
/ 25 апреля 2015

Для тех, кто ищет ответ сегодня: https://github.com/samg/diffy - самая безопасная ставка. Поскольку другие драгоценные камни и библиотеки, упомянутые здесь, были заброшены с некоторого времени.

0 голосов
/ 03 марта 2017

Есть два способа:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...