我正在构建一个旨在最终由非技术人员使用的Rails应用程序。它由几个带有文本块的页面和一个带有交互式画布图的特殊页面组成。
我想让他们轻松编辑应用程序中包含的任何文本。实现这一目标的最佳方法是什么?目前,文本是在应用程序的不同视图中编写的,不允许他们编辑它而无需通过FTP或类似设备进行连接并搜索正确的文件。
我正在考虑三种解决方案:
从我的观点来看,我的三个解决方案都看起来很糟糕。对数据库进行如此多的调用感觉不太好吗?将整个网站文本存储在一个文件中?使用regexp解析HTML?
用于解决此问题的常用方法是什么?
答案 0 :(得分:1)
那里有一本好书:Crafting Rails 4 Applications。这是本书的link源代码。您将在templater
文件夹中找到示例。基本上,您将能够根据请求参数创建自定义模板(就像Rails一样)。
<强>更新即可。这里有几个链接:
另外,这是我的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
希望它有所帮助。它看起来不错,并且易于最终用户使用。