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

我在以下属性上应用enumtransparency

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

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

enum transparency: %w(anonymous private public)

【问题讨论】:

    标签: ruby-on-rails rails-activerecord ruby-on-rails-4.2


    【解决方案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中的字段名应该使用复数形式
    • 如果您需要字段具有不同的名称,这似乎是可行的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 2017-10-22
    • 2012-03-19
    • 1970-01-01
    相关资源
    最近更新 更多