我目前正在使用STI模型並希望將一個記錄轉換爲另一個類型而不創建新記錄的項目。有一些觀察員在創建新模型時着迷於攻擊,但我不希望這些觀察者觸發並希望保持相同的ID。有沒有簡單的方法通過ORM將記錄從一個模型轉換到另一個模型?而不使用SQL?Rails STI更改類型
乾杯
我目前正在使用STI模型並希望將一個記錄轉換爲另一個類型而不創建新記錄的項目。有一些觀察員在創建新模型時着迷於攻擊,但我不希望這些觀察者觸發並希望保持相同的ID。有沒有簡單的方法通過ORM將記錄從一個模型轉換到另一個模型?而不使用SQL?Rails STI更改類型
乾杯
#becomes
可以做你想做什麼:
class Foo < ActiveRecord::Base
end
class Bar < Foo
end
class Baz < Foo
end
baz = Baz.create({})
bar = baz.becomes(Bar)
在這一點上,你還是得在foos
表baz
記錄。您必須確保保存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
您是否有基本型號?比如熊,貓,狗都是哺乳動物?如果是這樣,您可以使用該模型,只需更新屬性即可更改類型標誌。你可以跟我們分享你的模特嗎? –
[在單一表繼承的Rails中更改ActiveRecord類的類型]的可能重複(http://stackoverflow.com/questions/3262415/changing-type-of-activerecord-class-in-rails-with-single-table-繼承) –
此問題是http://stackoverflow.com/q/3262415/41283 –