2

我目前正在从事一个项目,我正在使用 STI 模型并希望将一个记录转换为另一种类型而不创建新记录。有些观察者会在创建新模型时触发,但是我不希望这些观察者触发并希望保持相同的 ID。有没有一种简单的方法可以通过 ORM 将记录从一个模型转换为另一个模型?,而不使用 SQL?

干杯

4

2 回答 2

3

#becomes可以做你想做的事:

class Foo < ActiveRecord::Base
end

class Bar < Foo
end

class Baz < Foo
end

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

那时,您仍然会在表中保留baz记录。foos您必须确保保存bar不会导致问题。

于 2012-07-24T22:52:41.133 回答
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
于 2014-09-29T02:16:19.330 回答