我正在编写一个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 mixins,所以我的大脑略微旋转,试图找出我的模块中要调用的咒语。
到目前为止,我发现this article非常有用,但无法解决如何在此处应用它。
答案 0 :(得分:1)
我认为最简单的方法是使用before_save
进行转换。
def contains_markdown
before_save do |record|
record.formatted = Redcarpet.new(record.input).to_html
end
end