如何处理数据库中应该只有一行的模型?

时间:2013-05-30 22:05:43

标签: ruby-on-rails model-view-controller content-management-system

客户通常希望无需返回开发人员即可控制其应用程序。在这些情况下,他们通常会请求一个简单的CMS,他们可以编辑其应用程序的其他静态部分。例如:

  • 隐私政策
  • 条款条款
  • 关于部分
  • 联系我们

在Rails应用程序中,使它们成为单独的模型和控制器似乎很麻烦,因为它们实际上只是文本字段(尽管在我的特定情况下,“关于/联系我们”部分可以有多个部分)。控制器简单而且相对不重要,所以看起来他们只是把控制器目录搞得一团糟。

我在考虑某种StaticContent模型(尽管这个名称本身没有意义)可以包含所有这些字符串,但是按名称对它们进行索引。所以我可以这样做:

StaticContent.find_by_name("about")

或类似的东西,并将所有内容保存在一个控制器和模型中 - 但我仍然不喜欢一直按名称查找所有内容的想法。在我描述的情况下,是否有人遇到过更好的存储此类数据的解决方案?

2 个答案:

答案 0 :(得分:0)

我建议将数据放在.yml文件中,例如

example.yml
 - content_name: privacy_policy
   - title: Privacy Policy  
   - content: blah blah blah
 - content_name: terms_and_conditions
   - title: Terms and Conditions
   - content: blah blah blah blah

将它添加到seed_fu并让它为一个包含content_name,title,content列的通用表。至于find_by_name,我没有看到这样做的大问题。但是,使用yml文件应该有助于解决如何存储此数据的问题

答案 1 :(得分:0)

我曾经在我们拥有Page模型的应用程序上工作过。我们使用friendly_id gem(https://github.com/FriendlyId/friendly_id)来为它们提供可以作为id和uri的slug。那么你就有了:

scope '/' do
  resource :pages
end
路径文件中的

和一个非常简单的控制器,它只能通过:id参数查找(但是,这是一个人类可读的slug)并将page.content渲染到布局中(对于节目动作)。例如,/terms会显示您的条款&条件页面,/about将显示关于页面等等。

我们使用TinyMCE(http://www.tinymce.com/)作为wysiwyg编辑器来生成我们存储在content对象的page字段中的标记。

简单,灵活的解决方案甚至可以创建全新的pages。您当然可以轻松地将其限制为only: [ :show, :edit, :update ],并且如果您只想给它们一些可编辑的页面而不允许它们创建/销毁/移动它们,则可以阻止编辑slu。