【问题标题】:How to structure content in Ruby (RoR) app?如何在 Ruby (RoR) 应用程序中构建内容?
【发布时间】:2010-11-29 19:51:30
【问题描述】:

我正在构建一个超级简单的 CMS 来处理较小的“静态”页面类型项目(例如 - 朋友的小型网站)。我想添加不同的“页面类型”。我之前在 Coldfusion 中构建了类似的东西。看起来像这样:

表格内容类型:

content_type_code varchar(10)
content_type_name

表格内容:

content_id
content_type_code varchar(10)
content_name
content_desc
content_url

我会创建一个名为“博客”或“照片”的内容类型,每次添加内容时,都会为其分配 content_type_code。然后在 /blog/ 中查询所有 content_type_code 为“blog”的内容。

现在我正在使用 Ruby/RoR,我正在尝试以不同的方式思考问题。我在想一个更好的方法可能是使用带有 awesome_nested_set (https://github.com/collectiveidea/awesome_nested_set) 的嵌套页面。但我不确定这是否是最好的解决方案。

然后我可以创建一个名为“博客”的页面并添加到那么多页面。所以基本上顶层将取代我之前示例中的“content_type”。

有人可以引导我朝着正确的方向前进,最好的方法是什么?我是一个新手,正在寻找正确的方向。

编辑

我应该补充一点,我要在不同“类型”内容之间改变的唯一真实的事情是布局和它们的显示位置(/photos/ 中的“照片”内容,/blog/ 中的“博客”内容)。

【问题讨论】:

  • 为每一列加上表名的前缀是丑陋的,并且在 Rails 社区中是不受欢迎的。表别名的存在是有原因的,请使用它们。
  • 表格示例来自之前在 Coldfusion 中构建的应用程序。

标签: ruby-on-rails


【解决方案1】:

我试着回顾一下:

  1. 您想构建一个 CMS
  2. 您的 CMS 管理一个网站
  3. 网站是由内容组成的
  4. 有不同类型的内容,我假设每种类型的内容都有自己的行为
  5. 内容以树的形式组织

这是我建议你的计划:

  1. 创建内容资源;使用脚手架让某些东西已经工作,添加一些字段(例如标题和正文)
  2. 为您的新模型添加验证
  3. 针对您的验证编写几个单元测试(完全没用,只是为了看看它是如何工作的)
  4. 安装 awesome_nested_set 并设法使其适用于您的模型
  5. 在 UI 上工作,以便轻松创建新内容、移动内容、编辑单个内容
  6. 现在是时候实现内容类型了; STI 是 Rails 的方式,但我必须警告你 这真的很难。我建议您重申 1、2、3、5 来为 Photo 和 BlogPost 创建新模型

一旦你到了那里,你就会有数百个想法要实施。玩得开心:)

【讨论】:

  • 太棒了,这是我第一次听说 STI。我认为这可能是要走的路,因为每个类的属性之间确实没有区别(希望我说的是对的)。主要区别在于它们的显示方式。例如,我希望在“/photos/”中可以访问所有“照片”内容并具有差异布局。我想在“/blog/”访问的所有博客内容,并具有差异布局等。
  • 在 routes.rb 中绘制新路由并编写一些自定义操作即可。
  • 好的,感谢您的详尽回答。您提供的 STI 链接链接到另一篇也确实有帮助的文章。非常感谢!
【解决方案2】:

我宁愿让用户在选择页面上选择一个模型,例如“照片”或“博客”,并根据该选择加载一个编辑页面,而不是使用 content_type。因此,用户想要一个新的“博客”条目,他们将被重定向到博客/新条目或“照片”以获取照片/新条目。就可用性和控制后端而言,这是最简单的方法,并且您的数据库中没有冗余数据(例如,在博客类型中不需要的空照片 URL)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 2011-07-07
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多