我有一些数据,我想存储在我的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方式"?
对于不属于其他任何地方的常量,我有一个StaticData类.
class StaticData GRAPH_TYPES = ['bar', 'line'] SOMETHING_ELSE = ['A', 'B'] end
然后我开始了
StaticData::GRAPH_TYPES
我之前写的类似问题的相同答案适用并发布,因为此答案仍然出现在搜索结果中.
在控制器中加一个常数会有一些意义,因为常量与它直接相关.否则,常量应放在专用的初始化文件中: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开始,这仍然有效.
我相信你现在做的很好; 你说数据只与一个控制器有关,因此它就属于它.如果多个控制器需要它,或者它们比常数值更复杂,则其他方法可能有意义.