コントローラーでアクションのレイアウトを選択するために使用するロジックを抽象化するモジュールを作成しようとしています。
コントローラーの例は次のようになります。
class StudentsController < ApplicationController
second_tierable only: [:new, :create]
layout "students"
...
次のクラス メソッドを定義するモジュールを ApplicationController に含めました。
def second_tierable(options = {})
self.send(:before_filter, options.slice(:only, :except)) do
self.class.layout "second_tier_page"
end
end
これが私が期待することです:
- アクションが新規または作成の場合、レイアウトは「second_tier_page」です。
- それ以外の場合、レイアウトは「学生」です
new または create アクションが実行された後を除いて、これはまさに起こることです。たとえば、「students/new」にアクセスしてから「students/index」にアクセスすると、「second_tier_page」レイアウトがインデックス用にレンダリングされます。
アプリを開発モードで実行しています。興味深いことに、アプリで任意のファイルに変更を加えて保存すると、「インデックス」を更新すると正しいレイアウトがレンダリングされます。これにより、何かがどこかにキャッシュされていると信じることができますが、根本的な問題について途方に暮れています。
何か案は?