Rails:在模型之间共享枚举声明值

Posted

技术标签:

【中文标题】Rails:在模型之间共享枚举声明值【英文标题】:Rails: Share enum declaration values between models 【发布时间】:2015-06-09 15:56:10 【问题描述】:

我在以下属性上应用enum:transparency

在两个不同的模型中使用相同的属性(带有枚举):CategoryPost

是否可以在模型之间共享枚举值,以避免代码重复:

enum transparency: %w(anonymous private public)

【问题讨论】:

【参考方案1】:

您可以使用concern。

module HasTransparency
  extend ActiveSupport::Concern
  included do
    enum transparency: %w(anonymous private public)
  end
end

然后将其包含在您的模型中:

class Category < ActiveRecord::Base
  include HasTransparency

  ....
end

【讨论】:

几乎正确,有一个小错误!您的示例将返回一个字符串数组,而不是符号数组。 %w 必须更改为 %i。 此解决方案要求两个枚举都附加到同名字段。【参考方案2】:

使用关注点或模块的“正确方式”的替代方法是,您可以引用另一个类枚举。它对我来说非常有效:

enum same_values_than_other: SomeOtherClass.my_awesome_enum

【讨论】:

SomeOtherClass中的字段名应该使用复数形式 如果您需要字段具有不同的名称,这似乎是可行的方法。

以上是关于Rails:在模型之间共享枚举声明值的主要内容,如果未能解决你的问题,请参考以下文章

Rails - 使用ActiveRecord :: Enum时的ArgumentError

在 Rails 中将整个应用程序共享的部分放在哪里?

如何为 Rails 中枚举中列出的角色添加模型?

在 Rails 应用程序中将模型搜索逻辑放在哪里?

Ruby on Rails 表单中的枚举选择映射值

在哪里放置不是模型、视图、控制器或助手的 Rails 代码?