Rails:在数据库外部存储静态查找类型/常量



我有静态查找,用于填充表单字段以及验证属性。

我没有将它们存储在数据库中,因为它们是静态的,不会更改,核心应用程序逻辑是基于这些值的(不希望数据库值的更改破坏应用程序)。

# 15+ different categories...
APPLICANT_TYPES = ["primary", "coborrower"].freeze
# forms...
<%= f.select :applicant_type, APPLICANT_TYPES %>
# models...
class Applicant < ApplicationRecord
  validates :applicant_type, inclusion: { in: APPLICANT_TYPES }
end

我有几个可行的选择,但我不确定哪一个是最传统的或可能会引起问题。对于这样的静态常量,Rails的约定是什么?

  1. config/initializers/constants.rb
  2. 所有模型从继承的
  3. ApplicationRecord
  4. config/constants.yml似乎不适合我,因为有额外的步骤来加载YAML到Ruby,所以为什么不去constants.rb上面?

我有点困惑,因为它们中的任何一种都有效,但我肯定会有一些意想不到的副作用,我没有考虑到。

标准做法是在类(或模块)中定义与它们最相关的常量。在您的示例中,您将在Applicant:

中定义它们
class Applicant < ApplicationRecord
  APPLICANT_TYPES = ["primary", "coborrower"].freeze
end

然后当你使用它们时,通过那个类(或模块)引用它们:

<%= f.select :applicant_type, Applicant::APPLICANT_TYPES %>

这是一个非常普通的答案,但到目前为止它对我很有帮助!

还可以看看ActiveRecord::Enum,如果这是一个模式,帮助你。

最新更新