我想在我的应用程序中使用像(中国,印度,美国)这样的常量值,这些常量值是在配置文件中定义的。如何设置为常量,如何在控制器中访问?
发布于 2012-02-21 10:20:20
这显然不是对您问题的回答,而是建议您寻找替代方案。我认为创建一个包含您的菜肴名称的数据库表比使用常量要好得多。利用rails关联,这样您就可以编写良好的可读性代码。
使用常量的问题是,在许多情况下,它们并不是真正的常量。如果您想添加日语,会发生什么?如果你想添加泰语,但6个月后决定放弃它,会发生什么?如果你认为印度人太宽泛了,你想要“北印度人”和“南印度人”,会发生什么?
使用数据库表,您可以确保与这些常量关联的类始终处于一致状态。当您需要获取所有这些内容时,只需编写一行代码即可
my_cuisines = Cuisine.all有很好的内置迭代器。
发布于 2012-02-21 10:25:24
首先,考虑一下Marc Talbot所说的话。确保你真的不想要普通的数据库模型。如果您确定要使用常量,请继续:
我更喜欢的方法是使用伪模型。
在app/models/cuisine.rb中
class Cuisine
# Should come before the constant declarations
def initialize(name)
@name = name
end
Mexican = new('Mexican')
Chinese = new('Chinese')
Indian = new('Indian')
def to_s
name
end
# other related methods
# like translations, descriptions, etc.
end然后,在应用程序的所有其他地方,您可以只引用Cuisine::Mexican或Cuisine::Indian
此外,根据您使用它的方式,您可能需要一个菜肴列表。
class Cuisine
...
def self.all
[Mexican, Indian, Chinese, ...]
end
end这种技术使代码保持井然有序,并使您不必再编写另一个初始化器文件。
发布于 2012-02-21 13:47:47
你可以使用gem 'settingslogic‘
模型settings.rb:
class Settings < Settingslogic
source "#{Rails.root}/config/settings.yml"
namespace Rails.env
end然后,在控制器中使用:
Settings.cousineshttps://stackoverflow.com/questions/9371124
复制相似问题