STI在继承类型之间发生变化.

Imm*_*mmo 6 ruby ruby-on-rails ruby-on-rails-3

在我的模型中,我使用这样的STI

车型:vehicle.rb

class Vehicle < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)

车型:car.rb

class Car < Vehicle
end
Run Code Online (Sandbox Code Playgroud)

总线型号:bus.rb

class Bus < Vehicle
end
Run Code Online (Sandbox Code Playgroud)

如果我创建一辆汽车,我可以以某种方式将其类型更改为车辆或公共汽车吗?

Har*_*tty 8

要永久更改类型,请更改type列的值.

c1 = Car.first
c1.name # BMW

c1.update_attribute(:type, "Bus")

b1 = Bus.first
b1.name # BMW
Run Code Online (Sandbox Code Playgroud)

要在内存中更改对象类型而不从DB重新加载它,请使用"变为,如同

c1 = c1.becomes(Bus)
Run Code Online (Sandbox Code Playgroud)