0

如何實現 「select_layout」 的方法,這樣我可以改變這個代碼:select_layout Ruby實現元編程

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 

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

UPDATE:下面的解決方案是不夠好;)

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

是什麼讓你在這裏實現元編程? – rtdp

回答

1

使用render ..., :layout => has_resource? ? "cpu/context" : "cpu/account"如果你想改變佈局,layout是一個類方法,用於指定一組方法的佈局。

0

它找不到has_resource,因爲has_resource被定義爲一個實例方法,而select_layout方法被定義爲一個類方法。

+0

只需在控制器中定義has_resource此方法並使其返回true – tomaszbak

+0

您必須在控制器中定義「self.has_resource」以使其工作。 –