渲染布局存储在数据库中

时间:2011-06-15 12:03:22

标签: ruby-on-rails ruby-on-rails-3 render

与另一个站点进行一些集成工作我有一个不寻常的要求,需要在运行时创建布局。

目前我不得不求助于这样的事情:

def new
  body = render_to_string 'new', :layout => false      
  page = add_layout(body, db.load_template)
  render :text => page
end

这有点尴尬,我宁愿做类似的事情:

def new
  ...
  render 'new', :layout => db.load_template
end

有更清洁的方法吗?也许可以在运行时注册新的布局并使用正常的语法?

2 个答案:

答案 0 :(得分:3)

哈!我遇到了一个可以解决这个问题的项目。查看panoramic。它将rails视图存储在数据库中而不是文件系统中。

答案 1 :(得分:1)

您可以使用模块和alias_method_chain扩展ActionController :: Base(或ApplicationController)以使其工作。

module Foo

  alias_method_chain :render, :dblayout

  def render_with_dblayout options = nil, extra_options = {}, &block
   if options.include? :dblayout
     ...
   else
     render_without_dblayout options, extra_options { yield }
   end
  end
end

ActionController::Base.send(:include, Foo)