Active Record - 在模型中自动生成 markdown

发布于 2024-12-01 14:45:46 字数 836 浏览 3 评论 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 的地方,我想将代码注入到 Post 模型中,以便每当对 input 进行更改时,formatted 被重新计算(使用 Markdown 引擎)。像(伪代码)这样​​的东西:

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

现在我仍然在认真思考 Ruby mixin,所以我的大脑有点旋转,试图弄清楚在我的模块中调用什么咒语。

到目前为止,我发现这篇文章非常有用,但不能'不知道如何在这里应用它。

I'm writing a Ruby module to provide automatic markdown generation on blog posts etc.

The code so far looks like this:

class Post < ActiveRecord::Base
  contains_markdown
end

module MarkdownMixin
  def contains_markdown
    # HELP! :)
  end
end

ActiveRecord::Base.send :extend, MarkdownMixin

That code seems to be working (i.e. my unit tests don't throw any 'not defined' errors etc.). The Post table contains an input and formatted column.

Where I've written # HELP I want to inject code to the Post model so that whenever a change is made to input, formatted is recalculated (using a Markdown engine). Something like (pseudo-code):

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

Now I'm still really getting my head around Ruby mixins so my brain's slightly spinning trying to work out what incantation to call in my module.

So far I've found this article quite useful, but can't work out how to apply it here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

难得心□动 2024-12-08 14:45:46

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

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

I think the easiest way would be to use a before_save where you make the transformation.

def contains_markdown
  before_save do |record|
    record.formatted = Redcarpet.new(record.input).to_html
  end
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文