【发布时间】:2011-05-05 21:10:24
【问题描述】:
我刚刚开始使用我的第一个 Ruby on Rails Web 应用程序。我有一堆不同的模型、视图、控制器等等。
我想找到一个好地方来坚持真正全局常量的定义,这些常量适用于我的整个应用程序。特别是,它们既适用于我的模型逻辑,也适用于我的观点中做出的决定。我找不到任何 DRY 的地方可以将这些定义放在对我的模型和所有视图都可用的地方。
举一个具体的例子,我想要一个常量COLOURS = ['white', 'blue', 'black', 'red', 'green']。这在模型和视图中无处不在。我可以在哪里只在一个地方定义它以便访问?
我尝试过的:
- model.rb 文件中与它们最相关的常量类变量,例如
@@COLOURS = [...]。但是我找不到一种理智的方式来定义它,以便我可以在我的观点中写Card.COLOURS,而不是像Card.first.COLOURS这样的笨拙的东西。 - 模型上的一个方法,类似于
def colours ['white',...] end- 同样的问题。 - application_helper.rb 中的一个方法 - 这是我目前正在做的,但助手只能在视图中访问,而不能在模型中访问
- 我想我可能在 application.rb 或 environment.rb 中尝试过一些东西,但它们看起来并不正确(而且它们似乎也不起作用)
有没有办法定义任何东西都可以从模型和视图中访问?我的意思是,我知道模型和视图应该是分开的,但肯定在某些领域中,它们有时需要引用相同的特定领域知识?
【问题讨论】:
-
我很感激这真的太晚了,但对于其他读者,我想知道为什么你不只是在你的模型中定义它们并使用你的控制器将它们传递给你的视图。通过这种方式,您可以更清晰地分离关注点 - 而不是在控制器/视图和模型/视图之间创建依赖关系。
-
@TomTom:将这些常量传递给需要它们的每个视图和助手?换句话说,让控制器知道哪些视图需要哪些常量?这听起来更像是对 MVC 的违反。
标签: ruby-on-rails constants global