有一个伟大的书在那里:Crafting Rails 4 Applications。以下是link来源于本书的源代码。您会在templater
文件夹中找到示例。基本上,您将能够基于请求参数创建自定义模板(就像Rails一样)。
更新。这里有几个链接:
- Default views in Rails 3.0 with custom resolvers通过JoséValim(书的作者,顺便说一下)。
- 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
)介绍。
如果要更新文本,则必须将内容放入数据库或某些其他txt文件中。所以当用户改变,你必须重写该文件 –
听起来像一个正常的CMS。大多数CMS将他们的数据存储在数据库中。为什么你需要很多数据库调用?你认为多少? – Mischa
为什么要做这么多的数据库调用是不好的?这是一件很常见的事情。我写的网站上的一些页面需要做更多的请求来获取所需的所有数据(产品,图像,可下载的文档...)以进行渲染。 –