макет рендера хранится в базе данных - PullRequest
2 голосов
/ 15 июня 2011

Выполняя интеграционную работу с другим сайтом, у меня возникло необычное требование создания макета во время выполнения.

В данный момент мне приходится прибегать к чему-то вроде этого:

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 ]

3 голосов
/ 15 июня 2011

Ха! Я столкнулся с проектом, который решит именно это. Проверьте панорамный . Он хранит виды рельсов в базе данных вместо файловой системы.

1 голос
/ 15 июня 2011

Вы можете расширить ActionController :: Base (или ApplicationController) модулем и alias_method_chain, чтобы эта работа работала.

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)
...