2010-12-20 68 views
3

在Ruby on Rails應用程序中,我有一個控制器,我希望某些功能可以有條件地運行,其中條件取決於運行應用程序的環境。人爲的例子,在開發模式下,我想它做的事:在不同環境下工作方式不同的Rails幫助器方法

if foo == 5: 
    ... 
end 

而且在生產模式,我想:

if foo > 6: 
    ... 
end 

兩個條件之間的區別是多單複雜常量(上例中爲5或6)。

在Rails中最常用的方法是什麼?我會直接在environments/文件中編寫助手方法嗎?或者向檢查當前環境的應用程序控制器添加一個方法?或者是其他東西?

回答

7

我只是在邏輯語句中添加一個ENV['RAILS_ENV']的檢查。

http://guides.rubyonrails.org/configuring.html#rails-environment-settings

我想你的代碼更改爲:

if foo == 5 && ENV['RAILS_ENV'] == "development" then 
    ... 
elsif foo > 6 && ENV['RAILS_ENV'] == "production" then 
    ... 
end 

它只是另一個你流控制狀態,沒有必要把它複雜化。

如果你需要做大量的,在application.rb幾個方法可以幫助:

def isDev 
    ENV['RAILS_ENV'] == "development" 
end 

def isProd 
    ENV['RAILS_ENV'] == "production" 
end 
+0

我知道那個(或Rails 3應用程序中的Rails.env)。我的問題是在哪裏以及如何最好地將其應用到應用程序中(在應用程序控制器中,在'environment.rb'等中)。 – jrdioko 2010-12-20 23:29:56

+0

感謝您的澄清。 – jrdioko 2010-12-21 00:44:30

1

我經常需要做這在我的應用程序也一樣,在不同的地方。例如,我不想將分析代碼包含在開發模式中。所以我成立了應用程序控制器的一個實例變量或兩個:

before_filter :setup_variables 

def setup_variables 
    @development = (ENV['RAILS_ENV'] == "development") 
    @production = (ENV['RAILS_ENV'] == "production") 
end 

我現在可以測試無論我在開發模式在控制器以及意見。

另一個說明,雖然。如果您正在進行基於案例切換的lot(如果開發/如果正在生產),那麼您可能希望將其重構爲單獨的一組對象,並根據環境進行交換。例如,擁有一個DevelopmentLogic庫和一個ProductionLogic庫。