从Active记录的特定实例中删除状态机

时间:2014-12-12 11:09:01

标签: ruby-on-rails ruby activerecord state-machine

如何从ActiveRecord实例中删除状态机。 对于前

Class X < ActiveRecord::Base 
state_machine 
## rest of code
end

x = X.new

x.state_machines = nil ##something like this 

现在我想删除某些特定X实例的state_machine而不触及现有代码。

我们可以这样做吗? 我正在使用pluginaweek状态机。

1 个答案:

答案 0 :(得分:0)

这种做法似乎很奇怪,因为我们认为你没有告诉我们的同样问题可以用更愉快的方式解决。但是,您可以在运行时为特定实例删除getter #state_machine(或者如果需要,可以设置setter)。样本是:

class A
   def a 
   end
end

a1 = A.new
a2 = A.new
a1.a # => nil
a2.a # => nil
a1.instance_eval { undef :a } # => nil 
a1.a # => NoMethodError: undefined method `a' for #<A:0x80684f4>
a2.a # => nil

使用相同的方法,您可以在类的实例中重新定义任何实例方法。