2009-05-19 116 views
2

我創建了兩個相關的Rails應用程序,並且我注意到很多非DRY工作。Rails應用程序設置

例如,@title領域中的各種控制器方法被設置做同樣的事情,除了應用程序標題,如:

# SiteController (application 'Abc') 
def SiteController < ApplicationController 
    def index 
    @title = 'Abc' 
    end 
    def about 
    @title = 'about Abc' 
    end 
    def news 
    @title = 'Abc news' 
    end 
    def contact 
    @title = 'contact Abc' 
    end 
end 

和:

# SiteController (application 'Xyz') 
def SiteController < ApplicationController 
    def index 
    @title = 'Xyz' 
    end 
    def about 
    @title = 'about Xyz' 
    end 
    def news 
    @title = 'Xyz news' 
    end 
    def contact 
    @title = 'contact Xyz' 
    end 
end 

我」什麼米尋找做的是有像

# SiteController 
def SiteController < ApplicationController 
    def index 
    @title = "#{ApplicationTitle}' 
    end 
    def about 
    @title = "about #{ApplicationTitle}" 
    end 
    def news 
    @title = "#{ApplicationTitle} news" 
    end 
    def contact 
    @title = "contact #{ApplicationTitle}" 
    end 
end 

我想圖的東西是:應該在哪裏定義不變的應用程序設置。它在config/* rb文件中嗎?它是否在.yaml文件之一中?

在此先感謝

回答

4

對於一些基本的應用程序名稱,再加上很多其他的常量,我宣佈在environment.rb中的常量

常量應該使用Ruby的常量功能,而不是與訪問者爲markjeee類變量建議。

Ref:pg 330,「Programming Ruby」(Pickaxe)2nd Ed。

拉里

+0

謝謝。我打算它是一個常數,但不知道environment.rb(或其他地方,對於這個問題)。 – dcw 2009-05-19 06:35:11

2

您可以將它們放在app/controllers/application.rb文件中。

例如:

class ApplicationController < ActionController::Base 
    attr_accessor :application_title 

    def initialize 
    self.application_title = "Some application title" 
    end 
end 

然後在你的控制器,你可以訪問標題:

class SomeController < ApplicationController 
    def some_action 
    @title = "some text with #{application_title}" 
    end 
end 

您也可以聲明應用程序標題作爲輔助方法,這樣就可以在訪問你的意見。

你也可以使用全局常量,並把它放在你的config/environment.rb文件中。把它放在environment.rb中的最下部,配置外塊,像這樣:

APPLICATION_TITLE = "Some title here" 

,只要你在你的控制器設置@title實例變量然後使用常量。請注意,它必須全部大寫,所以Ruby會將其解釋爲全局常量。

+0

感謝常數。我知道ApplicationController的一個,但不知道有關environment.rb – dcw 2009-05-19 06:34:05

1

定義在config/environment.rb文件中