ActiveRecord类(枚举)在config / initializers中使用patch时行为不正确

时间:2015-10-31 18:31:19

标签: ruby-on-rails ruby

我使用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)附带的相同代码,我也会得到相同(不正确)的行为。

有没有人知道为什么会发生这种情况以及如何解决这个问题?

0 个答案:

没有答案