2014-02-12 74 views
1

我正在构建一个旨在最终由非技术人员使用的Rails应用程序。它由一些带有文本块的页面和一个带有交互式画布图纸的特殊页面组成。存储可编辑内容的位置?

我想,让他们可以轻松地编辑应用程序中包含的任何一段文字。什么是最好的方法来实现这一目标?目前,文本是在应用程序的不同视图中编写的,如果不通过FTP或类似方式连接并搜索正确的文件,则不允许编辑它。

我想到的三种解决方案:

  1. 存储所有的文本块在数据库中。在每个页面上,获取require块并在渲染前插入它们。使用保存按钮构建一个页面,该页面列出可编辑区域中数据库中的所有块。
  2. 将所有文本块存储在json文件中。创建一个可以读取文件并获取视图所需块的模型。建立一个页面,让您编辑每个块并将其保存在文件中。
  3. 创建某种密码保护的管理界面,其获取在views目录下的所有文件,使用正则表达式查找文本块,并允许用户编辑每个块和保存。

从我的角度来看,我所有的三种解决方案看起来很糟糕。对数据库进行如此多的调用并不感到好吗?将整个网站文本存储在一个文件中?用正则表达式解析HTML?

用于解决此问题的常用方法有哪些?

+0

如果要更新文本,则必须将内容放入数据库或某些其他txt文件中。所以当用户改变,你必须重写该文件 –

+0

听起来像一个正常的CMS。大多数CMS将他们的数据存储在数据库中。为什么你需要很多数据库调用?你认为多少? – Mischa

+1

为什么要做这么多的数据库调用是不好的?这是一件很常见的事情。我写的网站上的一些页面需要做更多的请求来获取所需的所有数据(产品,图像,可下载的文档...)以进行渲染。 –

回答

1

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

更新。这里有几个链接:

  1. Default views in Rails 3.0 with custom resolvers通过JoséValim(书的作者,顺便说一下)。
  2. Implementing a Rails 3 View Resolver

而且,这里的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)介绍。

+0

你有一个代码示例或免费资源的链接?无论如何感谢书链接。我试图看看源代码,但没有解释就没有多大意义... –

+0

我已经更新了我的答案了一下。看一看。 – marvelousNinja

+0

谢谢!它看起来很有趣,我会研究更多并尝试。 –

1

我已经做到了与真棒用户满意度几次通过使用这样的: http://jejacks0n.github.io/mercury/

酒店还设有一个Railscast,让你一步的指示,一个很好的概述和步骤:

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

希望它有帮助。它看起来很不错,而且很容易用于最终用户。

+0

从用户体验的角度来看,这令人印象深刻!非常感谢你的回答。 –