我目前正在处理一个使用STI模型的项目,希望在不创建新记录的情况下将一条记录转换为另一种类型。有一些观察者在创建新模型时被连接到触发,但是我不希望这些观察者触发,并希望保持相同的ID。有没有一种简单的方法可以将记录从一个模型转换到另一个模型,而不使用SQL?
干杯
发布于 2012-07-25 06:52:41
#becomes可以做你想做的事情:
class Foo < ActiveRecord::Base
end
class Bar < Foo
end
class Baz < Foo
end
baz = Baz.create({})
bar = baz.becomes(Bar)此时,foos表中仍然有baz记录。您必须确保保存bar不会导致问题。
发布于 2014-09-29 10:16:19
正如https://stackoverflow.com/a/26091638/1935918中详细描述的那样,becomes!对我不起作用。相反,我建议使用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)
endhttps://stackoverflow.com/questions/10825755
复制相似问题