在Rails 5中枚举多态关联和覆盖默认行为

时间:2017-03-01 13:23:46

标签: ruby-on-rails ruby ruby-on-rails-5

1)enum可以很好地用于多态关联吗?

class MyModel < ActiveRecord::Base
  enum my_status: [:a, :b, :c, :d]
end


class MyModel2 < ActiveRecord::Base
  enum my_status: [:aa, :bb, :cc, :dd]
end

有任何缺点吗?

2)我可以覆盖枚举的getter或setter以及如何?

1 个答案:

答案 0 :(得分:0)

我假设MyModelMyModel2是两种可能的多态关联类型。

  1. 具有不同行为的相同属性名称是多态性擅长的,我没有看到任何理由不使用它。

  2. 枚举属性可以像任何属性一样覆盖其getter和setter。

  3. 例如:

    # Return the status as uppercase
    def my_status
      super.upcase
    end
    
    # Save status as lowercase
    def my_status=(new_status)
      super(new_status.downcase)
    end
    

    枚举宏添加的特殊方法可以用同样的方式覆盖。