Ruby on rails 选择布局实现Ruby元编程

Ruby on rails 选择布局实现Ruby元编程,ruby-on-rails,ruby,programming-languages,metaprogramming,Ruby On Rails,Ruby,Programming Languages,Metaprogramming,如何实现“select_layout”方法,以便转换此代码: 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

如何实现“select_layout”方法,以便转换此代码:

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

它找不到has_资源,因为has_资源被定义为实例方法,而select_布局方法被定义为类方法。

使用
render…,:layout=>has_资源?“cpu/context”:“cpu/account”
如果您想动态更改布局,
layout
是一个类方法,用于指定一组方法的布局。

是什么让您在这里实现元编程的?只需在controller中定义has\u resource此方法并使其返回true您就必须定义“self.has\u resource”在控制器中使其工作。
class Cpu::ContextsController < Cpu::ApplicationController
  select_layout do
    has_resource? ? 'cpu/context' : 'cpu/account'
  end
end
  before_filter do
    self.class.send(:layout, has_resource? ? 'cpu/context' : 'cpu/account')
  end