2011-08-25 110 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