在我的项目中,我想使用常量来代替简单的字符串。为此,我在config/initiailizer/constant.rb
文件中定义了颜色常量。这是代码::
RED = "red"
GREEN = "green"
STALE = "stale"
YELLOW = "yellow"
现在我想在我的一个控制器中访问此常量,以便如何访问它。我在Google上搜索了一些东西但是没有取得任何成功。请看看。
答案 0 :(得分:4)
如果您使用的是Rails 3,则可以将常量存储在constant.rb文件中,如下所示:
AppName::Application.config.YELLOW = "yellow"
以相同的方式从任何地方(控制器,模型等)访问它们:
AppName::Application.config.YELLOW
如果你需要存储一些特定于环境的常量,你可以在config / config.yml中创建一个YML文件,内容如下:
development:
yellow: "yellow"
production:
yellow: "green"
并将此黄色常量替换为:
AppName::Application.config.COLOR = YAML.load_file("#{Rails.root}/config/config.yml")[Rails.env]
并访问您的环境特定的COLOR常量,如下所示:
AppName::Application.config.COLOR[:yellow]
答案 1 :(得分:2)
如果你只是存储指向同名字符串的常量,那么你应该只使用符号。它们在内存方面更好,而且你并没有将这种尴尬的伪企业需求强加到Rails中。
所以不要使用这样的东西:
class MyController < ApplicationController
def show
@background_color = ::GREEN
end
end
您可以使用符号:
class MyController < ApplicationController
def show
@background_color = :green
end
end
另外,如果你坚持定义一堆相关的颜色常数,你应该真的避免用它们污染全局范围,而是将它们包装在一个模块中:
module Colors
GREEN = 'green'
BLUE = 'blue'
...
end
然后访问它们(从另一个[例如控制器]中定义的另一个类/模块中):
puts "I'm #{::Colors::BLUE}, like him, inside and outside."
或者,如果您经常在其他课程/模块中使用它们:
class Eiffel65
include ::Colors
def house_color
BLUE
end
end
有意义吗?