存储可编辑内容的位置?

时间:2014-02-12 11:24:19

标签: ruby-on-rails database

我正在构建一个旨在最终由非技术人员使用的Rails应用程序。它由几个带有文本块的页面和一个带有交互式画布图的特殊页面组成。

我想让他们轻松编辑应用程序中包含的任何文本。实现这一目标的最佳方法是什么?目前,文本是在应用程序的不同视图中编写的,不允许他们编辑它而无需通过FTP或类似设备进行连接并搜索正确的文件。

我正在考虑三种解决方案:

  1. 将所有文本块存储在数据库中。在每个页面上,获取需要块并在渲染之前插入它们。使用保存按钮构建一个页面,在可编辑区域中列出数据库中的所有块。
  2. 将所有文本块存储在json文件中。创建一个可以读取文件并获取视图所需块的模型。构建一个页面,允许您编辑每个块并将其保存在文件中。
  3. 创建某种受密码保护的管理界面,用于获取views目录中的所有文件,使用regexp查找文本块,并允许用户编辑每个块并保存。
  4. 从我的观点来看,我的三个解决方案都看起来很糟糕。对数据库进行如此多的调用感觉不太好吗?将整个网站文本存储在一个文件中?使用regexp解析HTML?

    用于解决此问题的常用方法是什么?

2 个答案:

答案 0 :(得分:1)

那里有一本好书:Crafting Rails 4 Applications。这是本书的link源代码。您将在templater文件夹中找到示例。基本上,您将能够根据请求参数创建自定义模板(就像Rails一样)。

<强>更新即可。这里有几个链接:

    JoséValim的
  1. Default views in Rails 3.0 with custom resolvers(顺便说一下,这本书的作者)。
  2. Implementing a Rails 3 View Resolver
  3. 另外,这是我的5枚硬币。基本上,它的工作原理如下。您需要定义自己的解析器并将其连接到ApplicationController(或任何其他所需的控制器):

    class Resolver < ActionView::Resolver
      # some code here
    end
    
    class ApplicationController < ActionController::Base
      append_view_path Resolver.new
    end
    

    在渲染过程中,Rails会要求你的控制器的解析器提供一个模板(它将遍历每个模板,直到它找到模板或者直到没有任何旋转变压器为止)。要提供模板,您的解析器需要find_templates方法:

    def def find_templates(name, prefix, partial, details)
      # some processing here
    end
    

    因此,基于此方法参数,您将提供一些数据库记录。但即使你已经拥有某种模型,Rails也希望这种方法能够返回ActionView::Template个实例。它可以像这样初始化:

    ActionView::Template.new(source, identifier, handler, details)
    

    所以,这就是你的find_templates应该是这样的:

    def find_templates(name, prefix, partial, details)
      template = DatabaseTemplate.find... # your custom model for DB templates 
      ActionView::Template.new...         # initializing actual template
    end
    

    本书的源代码(templater/3_final/app/models/sql_template.rb)中详细介绍了模型和解析器。

答案 1 :(得分:1)

通过使用以下功能,我已经完成了几次令人敬畏的用户满意度: http://jejacks0n.github.io/mercury/

还有一个Railscast可以为您提供良好的概述和分步说明:

http://railscasts.com/episodes/296-mercury-editor

希望它有所帮助。它看起来不错,并且易于最终用户使用。