Active Record - автоматическая генерация уценки в модели - PullRequest
0 голосов
/ 26 августа 2011

Я пишу модуль Ruby, чтобы обеспечить автоматическую генерацию уценки для сообщений в блоге и т. Д.

Код до сих пор выглядит так:

class Post < ActiveRecord::Base
  contains_markdown
end

module MarkdownMixin
  def contains_markdown
    # HELP! :)
  end
end

ActiveRecord::Base.send :extend, MarkdownMixin

Этот код, кажется, работает (т.е. мои модульные тесты не выдают никаких «не определенных» ошибок и т. Д.). Таблица Post содержит столбцы input и formatted.

Там, где я написал # HELP Я хочу внедрить код в модель Post, чтобы всякий раз, когда вносится изменение в input, formatted пересчитывается (с использованием механизма уценки). Нечто подобное (псевдокод):

def on_input_changed
  @formatted = Redcarpet.new(@input).to_html
end

Теперь я все еще действительно разбираюсь в миксинах Ruby, так что мой мозг немного крутится, пытаясь понять, какое заклинание вызвать в моем модуле.

Пока я нашел эту статью весьма полезной, но не могу понять, как применить ее здесь.

1 Ответ

1 голос
/ 26 августа 2011

Я думаю, что самый простой способ - использовать before_save, где вы делаете преобразование.

def contains_markdown
  before_save do |record|
    record.formatted = Redcarpet.new(record.input).to_html
  end
end
...