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