活动记录 - 在模型中自动生成降价

时间:2011-08-25 21:51:36

标签: ruby activerecord markdown mixins

我正在编写一个Ruby模块,以便在博客文章等上提供自动降价生成。

到目前为止,代码如下所示:

class Post < ActiveRecord::Base
  contains_markdown
end

module MarkdownMixin
  def contains_markdown
    # HELP! :)
  end
end

ActiveRecord::Base.send :extend, MarkdownMixin

该代码似乎正在工作(即我的单元测试不会抛出任何'未定义的'错误等)。 Post表包含inputformatted列。

我写的# HELP我希望将代码注入Post模型,以便每当对input进行更改时,都会重新计算formatted(使用降价引擎)。像(伪代码):

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

现在我仍然非常关注Ruby mixins,所以我的大脑略微旋转,试图找出我的模块中要调用的咒语。

到目前为止,我发现this article非常有用,但无法解决如何在此处应用它。

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是使用before_save进行转换。

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