我刚刚开始使用我的第一个Ruby on Rails webapp.我有一堆不同的模型,视图,控制器等等.
我想找到一个好地方来坚持真正全局常量的定义,这适用于我的整个应用程序.特别是,它们既适用于模型的逻辑,也适用于我的观点中的决策.我找不到任何干燥的地方将这些定义放在我们所有模型和我的所有视图中都可用的地方.
举一个具体的例子,我想要一个常数COLOURS = ['white', 'blue', 'black', 'red', 'green'].在模型和视图中都可以使用它.我在哪里可以在一个地方定义它以便它可以访问?
我尝试过的:
@@COLOURS = [...].但我无法找到一种明智的方式来定义它,以便我可以写出我的观点,Card.COLOURS而不是像kludgy那样的东西Card.first.COLOURS.def colours ['white',...] end- 同样的问题.是否无法定义任何可从模型和视图访问的内容?我的意思是,我知道模型和视图应该是分开的,但在某些领域肯定会有时候他们需要引用相同的领域特定知识?
我有一些数据,我想存储在我的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方式"?