Ruby on rails Rails助手方法,在不同环境中工作方式不同

Ruby on rails Rails助手方法,在不同环境中工作方式不同,ruby-on-rails,ruby,environment,conditional-statements,helpers,Ruby On Rails,Ruby,Environment,Conditional Statements,Helpers,在RubyonRails应用程序中,我有一个控制器,希望在其中有条件地运行一些功能,条件取决于应用程序运行的环境。作为一个人为的例子,在开发模式中,我希望它能做到: if foo == 5: ... end 在生产模式中,我希望: if foo > 6: ... end 这两个条件之间的差异比单个常数(上例中为5或6)更复杂 在Rails中最惯用的方法是什么?我会直接在环境/文件中编写助手方法吗?或者向应用程序控制器添加检查当前环境的方法?还是别的什么?我只想在逻辑语句

在RubyonRails应用程序中,我有一个控制器,希望在其中有条件地运行一些功能,条件取决于应用程序运行的环境。作为一个人为的例子,在开发模式中,我希望它能做到:

if foo == 5:
    ...
end
在生产模式中,我希望:

if foo > 6:
    ...
end
这两个条件之间的差异比单个常数(上例中为5或6)更复杂


在Rails中最惯用的方法是什么?我会直接在
环境/
文件中编写助手方法吗?或者向应用程序控制器添加检查当前环境的方法?还是别的什么?

我只想在逻辑语句中添加对
ENV['RAILS\u ENV']
的检查

我会将您的代码更改为:

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

我经常需要在我的应用程序中这样做,在不同的地方。例如,我不想在开发模式中包含分析代码。因此,我在应用程序控制器中设置了一两个实例变量:

before_filter :setup_variables

def setup_variables
  @development = (ENV['RAILS_ENV'] == "development")
  @production  = (ENV['RAILS_ENV'] == "production")
end
我现在可以在控制器和视图中测试我是否处于开发模式


不过,还有一点值得注意。如果您正在进行大量基于案例的转换(如果是开发/如果是生产),您可能希望将其重构为一组单独的对象,并根据环境进行交换。例如,有一个DevelopmentLogic库和一个ProductionLogic库。

我知道有一个(或者Rails 3应用程序中的
Rails.env
)。我的问题是在何处以及如何最好地将其合并到应用程序中(在应用程序控制器中,在
environment.rb
等中)。感谢您的澄清。