2011-04-01 44 views
0

我正在使用一個gem,它向我的Rails應用程序添加引擎,並使用默認應用程序佈局呈現所有呈現html片段的路徑。我想讓這個寶石中的控制器使用不同的佈局。有沒有一種方法可以將代碼添加到初始化程序中,該初始化程序將動態地導致gem中的控制器始終使用佈局。例如。我可以在初始化器中拋出如下代碼(這不起作用),假設SampleController的完整定義在我正在使用的gem中定義?Rails覆蓋gem中的控制器佈局

class SampleController 
    layout 'my_layout' 
end 

我知道你可以打電話class_evalinstance_eval類和實例方法,但如何重寫這個類型的初始化代碼?

+0

您不需要爲此做任何類或實例評估工作。您的引擎應自動將您的引擎佈局目錄推入視圖路徑堆棧。只要確保引擎配置正確指定了目錄(請注意,如果您單獨指定一個路徑,則需要將它們全部指定)。 – coreyward 2011-04-02 01:45:00

回答

1

如果您在佈局目錄中創建'sample.html.haml'(或任何模板語言),則將使用它代替SampleController的application.html。

http://guides.rubyonrails.org/layouts_and_rendering.html#finding-layouts

+0

好主意,除了我想使用的備用佈局已經存在並被命名爲別的東西。如果我不能想到其他任何東西,我可能會將它複製到「sample.html.haml」並接受此答案。謝謝。 – 2011-04-02 14:33:56