我已经安装了宝石
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中我可以成功创建一条记录但是状态值没有了。
当我尝试加载我的首页时,同样令人不安我正在使用Angular,它会进行API调用以检索返回500错误的记录。控制台日志显示
NoMethodError (undefined method `state_machine' for #<Class...
此人(state_machine gem integration with rails 4)遇到了同样的问题,需要重启服务器。我已经多次重启服务器,以及关闭终端然后启动服务器。
My Gemfile.lock有这个文件 - state_machine(1.2.0),捆绑包没有显示错误。
编辑:
尽管能够在删除该表中的所有先前记录(需要注释掉状态机代码)之后成功调用Table.all然后,在取消注释所述代码之后,能够创建并查看记录,如果我那么离开控制台并返回到控制台并重复完全相同的请求(Table.all)它导致未定义方法'state_machine'的相同错误
答案 0 :(得分:2)
我认为你有两种选择。
要么放弃:require => 'state_machine/core'
部分。所以新行看起来就像这样:
gem 'state_machine'
或者将此行添加到您的班级:
extend StateMachine::MacroMethods
例如:
require 'state_machine/core'
class Vehicle
extend StateMachine::MacroMethods
state_machine do
# ...
end
end
加载文件'state_machine/core'
会停用Class
的扩展名。这意味着除非您致电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'
原始版本不再维护(我不确定原因)但是新版本会不时更新,这可能会阻止一些错误。