0

我正在研究 cms,并且需要在页面控制器中选择动态模板。我有一个前置过滤器,可以在用户设置中获取所选模板名称。现在我需要弄清楚如何使用该实例变量呈现正确的布局。

这是我到目前为止所拥有的:

#This sets @template to the template object. @template.name is "Default"
before_filter :get_template

layout "templates/#{@template.name.downcase.gsub(" ", "_")}"
#layout "templates/default" #This line renders fine

我收到以下错误:

undefined method `name' for nil:NilClass

我的猜测是 before_filter 不一定在调用模板之前运行。

有没有更好的方法可以让我尝试实现这一目标?我真的没有使用许多模板并选择要渲染的模板的经验。

提前致谢!

4

3 回答 3

1

试试这个:

class PagesController < ApplicationController

  def template_path
    #... returns the template path, e.g. "layouts/theme_a"
  end

  def set_template
    self.class.layout(template_path)
  end

  before_filter :set_template

end
于 2012-10-11T04:57:59.830 回答
0
    get_template inside of application controller , so we can access from any controlller :

    --------------------
class ApplicationController < ActionController::Base
    @template=get_template
    layout "templates/#{@template.name.downcase.gsub(" ", "_")}"
end
于 2012-10-11T04:36:02.587 回答
0

这应该工作

class ApplicationController < ActionController::Base
    layout :set_custom_layout


  def set_custom_layout
    get_template
  end
end
于 2012-10-11T05:38:15.483 回答