我目前正在从事一个项目,我正在使用 STI 模型并希望将一个记录转换为另一种类型而不创建新记录。有些观察者会在创建新模型时触发,但是我不希望这些观察者触发并希望保持相同的 ID。有没有一种简单的方法可以通过 ORM 将记录从一个模型转换为另一个模型?,而不使用 SQL?
干杯
我目前正在从事一个项目,我正在使用 STI 模型并希望将一个记录转换为另一种类型而不创建新记录。有些观察者会在创建新模型时触发,但是我不希望这些观察者触发并希望保持相同的 ID。有没有一种简单的方法可以通过 ORM 将记录从一个模型转换为另一个模型?,而不使用 SQL?
干杯
#becomes
可以做你想做的事:
class Foo < ActiveRecord::Base
end
class Bar < Foo
end
class Baz < Foo
end
baz = Baz.create({})
bar = baz.becomes(Bar)
那时,您仍然会在表中保留baz
记录。foos
您必须确保保存bar
不会导致问题。
becomes!
对我不起作用,详见https://stackoverflow.com/a/26091638/1935918。相反,我建议使用update_column
:
def update
@company = Company.find(params[:id])
# This separate step is required to change Single Table Inheritance types
new_type = params[:company][:type]
if new_type != @company.type && Company::COMPANY_TYPES.include?(new_type)
@company.update_column :type, new_type
end
@company.update(company_params)
respond_with(@company)
end