Share enum declaration values with multiple attributes

后端 未结 3 1796
梦谈多话
梦谈多话 2021-02-03 22:41

I want to have a class with several attributes that saves weekdays with numeric values.

summary_weekday    :integer
collection_weekday :integer

3条回答
  •  无人及你
    2021-02-03 23:07

    In case people are still looking for a solution for Rails 4, I just tried this the other day and it seems to work well. I need a similar system to work because of various checks an admin must do on an object. I solved it by creating a Model Concern and using the class method in the Model:

    In models/concerns/review_states.rb

    require 'active_support/concern'
    
    module ReviewStates extend ActiveSupport::Concern
    
      class_methods do
        REVIEW_STATES = {not_initiated:0, in_progress:1, completed:2}
        SIGNUP_STATES = {pending:0, activated:1, disabled:2}
        def prefix_review_states(prefix)
          Hash[REVIEW_STATES.map { |k,v| [k.to_s.prepend(prefix).to_sym, v] }]
        end
      end
    end
    

    In your model:

    class ModelName < ActiveRecord::Base
      include ReviewStates
    
      enum one_status: prefix_review_states("one_")
      enum two_status: prefix_review_states("two_")
    

    This seems to make all of the correct database queries.

    Good luck!

提交回复
热议问题