我想拥有一个简单博客的网站,所以我创建了一个模型:
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对我来说都是新的,我不确定是否使用过回调。
答案 0 :(得分:2)
我认为该方法没有明显的错误。如果性能成为一个问题,缓存是一个非常简单的事情...使缓存有用的重要事情是减少或消除页面上的动态内容,以便缓存不会经常过时。如果您只是显示博客文章,那么只有在博客更改时才需要重新生成缓存,或者如果有人添加评论(如果您有评论),则需要重新生成缓存。
答案 1 :(得分:0)
我的一般经验法则是尽可能将数据库中的数据保持为“纯净”,并尽可能靠近用户进行任何清理,渲染,转义或一般修改 - 通常在辅助方法或视图中,在Rails应用程序中。
这对我有好处,原因如下:
因此,为了解决您的特定项目,我建议让您的用户将其文本输入Markdown并将其直接存储到数据库中,而不使用before_save
挂钩(作为旁边,将调用它)创建或更新,所以你不需要before_update
钩子,除非你想要更新而不是创建特定的东西。然后我会创建一个帮助方法,可能是santize_markdown
来进行清理。然后,您可以在原始markdown上调用helper方法,并从已清理的markdown生成您的body html。这可以根据你的口味和你正在做多少不同的地方进入视图或另一个辅助方法,但我可能不会把它放在模型中,因为它是如此特定于显示器。