在Ruby on Rails应用程序中,定义常量的最佳位置在哪里?

22 浏览
0 Comments

在Ruby on Rails应用程序中,定义常量的最佳位置在哪里?

在Ruby on Rails应用中,最好的地方来定义一个常量是哪里?

我有一个常量数据的数组,我需要在应用的所有控制器中都可以使用它。

0
0 Comments

在Ruby on Rails应用程序中定义常量的最佳位置是什么?

在config/environment.rb中定义常量,但如果有大量的全局常量,这样做会比较混乱。考虑从YAML文件中获取常量,或者将常量保存在数据库中。

编辑:

weppos的答案是更好的答案。

将常量保存在config/initializers/*.rb文件中。

原因:

在Ruby on Rails应用程序中,我们经常需要定义一些常量,例如网站名称、API密钥等。然而,将这些常量直接放在config/environment.rb中可能会导致代码混乱,尤其是当有大量的全局常量时。因此,我们需要找到一个更好的方法来管理这些常量。

解决方法:

一种解决方法是将常量保存在YAML文件中。这样,我们可以将常量的定义与应用程序的其他部分分离,并且可以根据需要轻松修改常量的值。另一种解决方法是将常量保存在数据库中,这样我们可以在运行时动态地修改常量的值。

然而,更好的解决方法是将常量保存在config/initializers/*.rb文件中。这样做的好处是,我们可以将所有常量的定义集中在一个地方,使代码更加整洁和可维护。此外,我们可以利用Ruby的强大功能来处理常量,例如在常量定义之前执行一些逻辑。

因此,将常量保存在config/initializers/*.rb文件中是在Ruby on Rails应用程序中定义常量的最佳实践。这种方法可以提高代码的可读性和可维护性,并且可以根据需要轻松修改常量的值。

0
0 Comments

在Ruby on Rails应用程序中定义常量的最佳位置是什么?

在Rails >= 3中,应用程序本身就是一个模块(位于config/application.rb)。您可以将它们存储在应用程序模块中:

module MyApplication
  SUPER_SECRET_TOKEN = "123456"
end

然后使用`MyApplication::SUPER_SECRET_TOKEN`来引用该常量。

在Rails >= 2.1 && < 3中,应将常量放置在以下位置:

1. 当常量具有应用程序范围时,放置在`/config/initializers`中。

2. 当常量引用特定的模型/控制器/辅助函数时,可以将其限定在类/模块本身中。

在Rails 2.1之前和`initializers`支持之前,程序员习惯将应用程序常量放置在`environment.rb`中。

以下是一些示例:

# config/initializers/constants.rb
SUPER_SECRET_TOKEN = "123456"
# helpers/application_helper.rb
module ApplicationHelper
  THUMBNAIL_SIZE= "100x20"
  def thumbnail_tag(source, options = {})
    image_tag(source, options.merge(:size => THUMBNAIL_SIZE))
  end
end

奇怪的是,这样做不起作用。尽管`constants.rb`在启动时被执行,但我无法在控制器或视图中访问`SUPER_SECRET_TOKEN`。

真有趣。谁知道在Rails中要求常量的大小写是强制执行的?

注意:在定义新常量后,请不要忘记重新启动服务器。否则,它将无法正确显示!

这不是Rails的原因,这是Ruby语言的要求。

谢谢您的答案!对于Rails 6来说,这仍然是最佳方法吗?另一个答案建议使用`config.x`:[stackoverflow.com/a/34053451/144088](https://stackoverflow.com/a/34053451/144088)

0