2011-08-25 83 views
0

我正在写一个Ruby模块,以提供博客文章等自动降价一代产生降价活动记录 - 自动模型

到目前为止的代码看起来是这样的:

class Post < ActiveRecord::Base 
    contains_markdown 
end 

module MarkdownMixin 
    def contains_markdown 
    # HELP! :) 
    end 
end 

ActiveRecord::Base.send :extend, MarkdownMixin 

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

当我写# HELP我想这样,每当在更改input发,formatted被重新计算将代码注入到Post模型(使用降价引擎)。类似的信息(伪代码):

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

现在我还是很让我周围的Ruby混入头,我的大脑的轻微旋转试图找出我的模块中,以所谓的咒语。

到目前为止,我发现this article相当有用,但不能解决如何在这里应用它。

回答

1

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

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

是的,我读过'before_save'钩子。你知道我用什么代码将它注入Post类吗? –

+0

您可以在contains_markdown方法中使用它。这里有一个很好的例子:https://github.com/ryanb/uniquify/blob/master/lib/uniquify.rb – Cydonia7

+0

我编辑过,所以你有一个代码示例。 – Cydonia7