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 に答える