Search code examples
ruby-on-railsrubyprogramming-languagesmetaprogramming

select_layout implementation Ruby meta programming


How to implement "select_layout" method so that I can transform this code:

class Cpu::ContextsController < Cpu::ApplicationController

  layout :select_layout

  private

  def has_resource?
    true # dummy
  end

  def select_layout
    has_resource? ? 'cpu/context' : 'cpu/account'
  end
end

into

class Cpu::ContextsController < Cpu::ApplicationController
  select_layout do
    has_resource? ? 'cpu/context' : 'cpu/account'
  end
end

UPDATE: solution below is good enough ;)

  before_filter do
    self.class.send(:layout, has_resource? ? 'cpu/context' : 'cpu/account')
  end

Solution

  • Use render ..., :layout => has_resource? ? "cpu/context" : "cpu/account" if you want to change layout on the fly, layout is a class method and used to specify layout for the set of methods.