【问题标题】:How do I handle models that should have one and only one row in their database?如何处理数据库中应该只有一行的模型?
【发布时间】:2013-05-30 22:05:42
【问题描述】:

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

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

在 Rails 应用程序中,将它们分开模型和控制器似乎很麻烦,因为它们实际上只是文本字段(尽管在我的特定情况下,关于/联系我们部分可以有多个部分)。控制器非常简单且相对不重要,因此它们看起来只是为了弄乱控制器目录。

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

StaticContent.find_by_name("about")

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

【问题讨论】:

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


    【解决方案1】:

    我曾经在一个应用程序上工作过,我们有一个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/) 作为所见即所得的编辑器来生成我们存储在 page 对象的 content 字段中的标记。

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

    【讨论】:

      【解决方案2】:

      我建议将数据放在 .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 中,并为其创建一个包含内容名称、标题、内容列的通用表。至于 find_by_name 我认为这样做没有什么大问题。使用 yml 文件应该有助于解决您如何存储这些数据的问题

      【讨论】:

      • 这个想法是客户可以自己轻松地编辑这些细节,无需任何 YAML、种子、数据库、Rails、服务器等知识,也无需依赖开发人员的帮助。这就是为什么他们中的许多人要求一个简单的 CMS,他们可以在其中编辑文本区域或类似的东西。
      • 我同意 YML 可以很好地存储静态内容,这就是它用于翻译文件和类似内容的原因。但这是一个不同的故事:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-02
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      • 2021-03-07
      • 1970-01-01
      相关资源
      最近更新 更多