与另一个站点进行一些集成工作我有一个不寻常的要求,需要在运行时创建布局。
目前我不得不求助于这样的事情:
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
有更清洁的方法吗?也许可以在运行时注册新的布局并使用正常的语法?
答案 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)