当前位置:  开发笔记 > 编程语言 > 正文

Rails中的常量值

如何解决《Rails中的常量值》经验,为你挑选了3个好方法。

我有一些数据,我想存储在我的Rails应用程序中,因为我用它来生成表单字段,检查提交的表单以确保其值有效等等.基本上,我希望数据在一个位置,因为我使用它在几个地方.

以前,我initialize在我的控制器中定义了一个方法,并在该方法中初始化实例变量,例如@graph_types = ['bar', 'line'].这似乎是一个坏主意,因为实际上所有这些initialize都被用于(初始化这些值),实例变量可以在以后更改,这是我不想要的.

现在,我在我的控制器中的任何方法之外定义常量,在我的过滤器后面的顶部,然后我冻结它们,例如GraphTypes = ['bar', 'line'].freeze.

我不想将这些数据存储在配置文件中,因为那时我必须跟踪一个额外的文件,读入文件并解析它等等.我不想将这些数据存储在数据库中,因为那样看起来有点矫枉过正; 我不需要做任何疯狂的LEFT OUTER JOIN类型查询,将可用的图形类型与我的另一个常量相结合Themes = ['Keynote', 'Odeo', '37 Signals', 'Rails Keynote'].freeze.我不想将数据存储在environment.rb中,因为此数据仅适用于特定的控制器.

考虑到这一切,我是否会采用这种"Ruby方式"?



1> user37011..:

对于不属于其他任何地方的常量,我有一个StaticData类.

  class StaticData

    GRAPH_TYPES = ['bar', 'line']

    SOMETHING_ELSE = ['A', 'B']

  end

然后我开始了

StaticData::GRAPH_TYPES


好吧,我把它放在models目录中,但将它放在lib中可能会更好.
你把课程放在哪里?你找到你的模特吗?

2> 小智..:

我之前写的类似问题的相同答案适用并发布,因为此答案仍然出现在搜索结果中.

在控制器中加一个常数会有一些意义,因为常量与它直接相关.否则,常量应放在专用的初始化文件中:Rails.root/config/initializers/constants.rb.

根据application.rb中列出的注释:

# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded

从Rails 3开始,这仍然有效.


@evanrmurphy由您决定。将常量包装在名称空间中是避免命名冲突的最安全方法,并且在使用常量时还会增加额外的上下文,但是有些人不喜欢任何名称空间(例如,全局范围)。

3> J Cooper..:

我相信你现在做的很好; 你说数据只与一个控制器有关,因此它就属于它.如果多个控制器需要它,或者它们比常数值更复杂,则其他方法可能有意义.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有