首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ruby on rails中设置中国菜、印度菜的常量值

问在ruby on rails中设置中国菜、印度菜的常量值
EN

Stack Overflow用户
提问于 2012-02-21 10:02:18
回答 3查看 109关注 0票数 1

我想在我的应用程序中使用像(中国,印度,美国)这样的常量值,这些常量值是在配置文件中定义的。如何设置为常量,如何在控制器中访问?

EN

回答 3

Stack Overflow用户

发布于 2012-02-21 10:20:20

这显然不是对您问题的回答,而是建议您寻找替代方案。我认为创建一个包含您的菜肴名称的数据库表比使用常量要好得多。利用rails关联,这样您就可以编写良好的可读性代码。

使用常量的问题是,在许多情况下,它们并不是真正的常量。如果您想添加日语,会发生什么?如果你想添加泰语,但6个月后决定放弃它,会发生什么?如果你认为印度人太宽泛了,你想要“北印度人”和“南印度人”,会发生什么?

使用数据库表,您可以确保与这些常量关联的类始终处于一致状态。当您需要获取所有这些内容时,只需编写一行代码即可

代码语言:javascript
复制
my_cuisines = Cuisine.all

有很好的内置迭代器。

票数 1
EN

Stack Overflow用户

发布于 2012-02-21 10:25:24

首先,考虑一下Marc Talbot所说的话。确保你真的不想要普通的数据库模型。如果您确定要使用常量,请继续:

我更喜欢的方法是使用伪模型。

在app/models/cuisine.rb中

代码语言:javascript
复制
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

此外,根据您使用它的方式,您可能需要一个菜肴列表。

代码语言:javascript
复制
class Cuisine

  ...

  def self.all
    [Mexican, Indian, Chinese, ...]
  end
end

这种技术使代码保持井然有序,并使您不必再编写另一个初始化器文件。

票数 0
EN

Stack Overflow用户

发布于 2012-02-21 13:47:47

你可以使用gem 'settingslogic‘

模型settings.rb:

代码语言:javascript
复制
class Settings < Settingslogic
  source "#{Rails.root}/config/settings.yml"
  namespace Rails.env
end

然后,在控制器中使用:

代码语言:javascript
复制
Settings.cousines
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9371124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档