State Machine Gem + Rails 4:未定义的方法`state_machine’for#
我已经安装了gem
gem 'state_machine', :require => 'state_machine/core'
我捆绑了。
我已将列状态类型字符串迁移到相关表。
我的模型看起来像这样
belongs_to :user belongs_to :patient validates :patient_id, uniqueness: {scope: [:email]} state_machine :initial => :unseen do event :look do transition :unseen => :seen end end
当我跑
rails c Table.all
我在引用state_machine的模型页面中得到了以下错误
undefined method `state_machine' for Table
我注释掉了模型页面的相关部分,删除了该表中之前创建的所有记录,取消注释了模型的state_machine部分,然后从rails c中我可以成功创建记录,但state的值为nil。
同样令人不安的是,当我尝试加载我的首页时,我正在使用Angular,它会进行API调用以检索返回500错误的记录。 控制台日志显示
NoMethodError (undefined method `state_machine' for #<Class...
此人( state_machine gem与rails 4集成 )具有相同的问题,需要重新启动其服务器。 我已经多次重启服务器,以及关闭终端然后启动服务器。
我的Gemfile.lock有这个文件 – state_machine(1.2.0),捆绑显示没有错误。
编辑:
尽管能够在删除该表中的所有先前记录(需要注释掉状态机代码)之后成功调用Table.all然后,在取消注释所述代码之后,能够创建并查看记录,如果我然后离开控制台并返回到控制台并重复完全相同的请求(Table.all)它导致未定义方法’state_machine’的相同错误
我想你有两个选择。
选项1
您应该删除:require => 'state_machine/core'
部分。 所以新行看起来像这样:
gem 'state_machine'
选项2
或者将此行添加到您的class级:
extend StateMachine::MacroMethods
例如:
require 'state_machine/core' class Vehicle extend StateMachine::MacroMethods state_machine do # ... end end
说明
加载文件'state_machine/core'
会禁用Class
扩展名。 这意味着除非您调用extend StateMachine::MacroMethods
否则方法state_machine
将无法在任何类中extend StateMachine::MacroMethods
。
详情请访问: https : //github.com/pluginaweek/state_machine#core-extensions
奖金提示
考虑使用state_machines
gem(以“s”结尾)而不是原始的state_machine
gem。
gem 'state_machines' gem 'state_machines-activerecord'
原来不再维护(我不知道为什么),但新的不时更新,它可能会防止一些错误。