我使用ruby 2.2.3和rails 4.2.4。
背景:我需要能够在同一模型中的枚举中重复使用值,因此我已将最新版本的Active Record&{39}修补为enum.rb
,因为他们正在添加Rails 5中的前缀/后缀支持将启用此功能。
问题:在修补代码后,Enum不再正常工作。见下文:
config/initializers/enum_patch.rb
控制台(无补丁)。正确的行为:
class GatheringSession < ActiveRecord::Base
GatheringStates = %i(ready running finished errored)
enum :gathering_state => GatheringStates
...
end
控制台(补丁):
2.2.3 :001 > gs2 = GatheringSession.last
=> #<GatheringSession id: 120, gathering_state: 2 ... >
2.2.3 :002 > gs2.gathering_state
=> "finished"
2.2.3 :003 > gs2.ready?
=> false
2.2.3 :004 > gs2.finished?
=> true
2.2.3 :005 > gs2.ready!
=> true
2.2.3 :007 > gs2.ready?
=> true
2.2.3 :008 > gs2.finished?
=> false
2.2.3 :009 > gs2.finished!
=> true
2.2.3 :010 > gs2.finished?
=> true
经过一些测试后,我发现问题不在于我修补的新代码,而是我在代码期修补的事实。即使使用Rails 4.2.4(here)附带的相同代码,我也会得到相同(不正确)的行为。
有没有人知道为什么会发生这种情况以及如何解决这个问题?