2012-05-30 69 views
1

我目前正在使用STI模型並希望將一個記錄轉換爲另一個類型而不創建新記錄的項目。有一些觀察員在創建新模型時着迷於攻擊,但我不希望這些觀察者觸發並希望保持相同的ID。有沒有簡單的方法通過ORM將記錄從一個模型轉換到另一個模型?而不使用SQL?Rails STI更改類型

乾杯

+0

您是否有基本型號?比如熊,貓,狗都是哺乳動物?如果是這樣,您可以使用該模型,只需更新屬性即可更改類型標誌。你可以跟我們分享你的模特嗎? –

+0

[在單一表繼承的Rails中更改ActiveRecord類的類型]的可能重複(http://stackoverflow.com/questions/3262415/changing-type-of-activerecord-class-in-rails-with-single-table-繼承) –

+0

此問題是http://stackoverflow.com/q/3262415/41283 –

回答

2

#becomes可以做你想做什麼:

class Foo < ActiveRecord::Base 
end 

class Bar < Foo 
end 

class Baz < Foo 
end 

baz = Baz.create({}) 
bar = baz.becomes(Bar) 

在這一點上,你還是得在foosbaz記錄。您必須確保保存bar不會導致問題。

0

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