Подтвердить что ты не робот

Отображение разницы между двумя телами текста в Rails

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

4b9b3361

Ответ 1

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

Ответ 2

http://github.com/pvande/differ Вы можете использовать это, которое выполняет diff для строк. Вам нужно будет построить некоторую логику, чтобы отформатировать ее в состоянии готовности к выпуску. Возможно, с помощью Builder:: XmlMarkup в помощнике.

Там также: http://github.com/myobie/htmldiff

Кажется, что вывод разметки - но это не очень хорошо документировано.

Что касается встроенного помощника, я не думаю, что у Rails есть что-то встроенное. Там http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/Hash/Diff.html - но в отличие от первого плагина, это используется для хэшей, а не для строк.

Ответ 3

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

Ответ 4

Существует два способа:

1.works также для неанглийской строки

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