博客文章的简单模型

时间:2010-01-12 21:15:42

标签: ruby-on-rails ruby activerecord

我想拥有一个简单博客的网站,所以我创建了一个模型:

   class Post < ActiveRecord::Base
     attr_accessible :title, :body
   end

我想使用Markdown但不使用HTML标记。我还希望始终保持数据库干净,我的想法是使用before_save() / before_update()回调来清理我的输入并转义HTML。

我不关心缓存和性能因此我总是想在需要时渲染帖子。我的想法是跟随模型:

   def body_as_html 
     html_from_markdown(body)
   end

您如何看待这样的设计? MVC和ActiveRecord对我来说都是新的,我不确定是否使用过回调。

2 个答案:

答案 0 :(得分:2)

我认为该方法没有明显的错误。如果性能成为一个问题,缓存是一个非常简单的事情...使缓存有用的重要事情是减少或消除页面上的动态内容,以便缓存不会经常过时。如果您只是显示博客文章,那么只有在博客更改时才需要重新生成缓存,或者如果有人添加评论(如果您有评论),则需要重新生成缓存。

答案 1 :(得分:0)

我的一般经验法则是尽可能将数据库中的数据保持为“纯净”,并尽可能靠近用户进行任何清理,渲染,转义或一般修改 - 通常在辅助方法或视图中,在Rails应用程序中。

这对我有好处,原因如下:

  • 您的数据的不同表示可能有显示要求 - 如果您在某个时刻实现控制台界面,您将不希望所有的html清理。
  • 尽可能远离数据库保持所有重要信息,这清楚地表明了他们对消毒的责任。维护代码的许多工具或新开发人员可能没有意识到字符串已经被清理,导致双重转义和其他格式丑陋。这也适用于“不同的表示”问题,因为事情最终会以多种不同的方式逃脱。
  • 当您手动查看数据库时,最终会不时发生这种情况,很高兴看到它们处于未处理状态。

因此,为了解决您的特定项目,我建议让您的用户将其文本输入Markdown并将其直接存储到数据库中,而不使用before_save挂钩(作为旁边,将调用它)创建或更新,所以你不需要before_update钩子,除非你想要更新而不是创建特定的东西。然后我会创建一个帮助方法,可能是santize_markdown来进行清理。然后,您可以在原始markdown上调用helper方法,并从已清理的markdown生成您的body html。这可以根据你的口味和你正在做多少不同的地方进入视图或另一个辅助方法,但我可能不会把它放在模型中,因为它是如此特定于显示器。