Rails STI重命名对象类型,StandardError - 单表继承机制无法找到子类

时间:2015-05-19 09:10:40

标签: ruby-on-rails ruby migration sti

我正在尝试运行将重命名对象类型的迁移。我正在使用Ruby 1.9.3-p327 Rails 3.2.18

我们有一个具有许多不同类型的记分卡模型,我们使用STI来区分这些类型。只有一种类型的记分卡被抽象地命名。我重命名了模型,然后修复了系统中属于它的所有关系。只有现在运行迁移才能改变其类型是制动。 Type是模型名称。

这是我正在使用的迁移。它找到具有该特定类型的所有记分卡,然后更新其类型。

class UpdateFscScorecardsToShortTermFinancial < ActiveRecord::Migration
  def up
    Scorecard.where(type: 'FinancialGenericAlphaScorecard').each do |scorecard|
      scorecard.update_column(:type, 'FinancialShortTermGenericAlphaScorecard')
    end
  end

  def down
    Scorecard.where(type: 'FinancialShortTermGenericAlphaScorecard').each do |scorecard|
      scorecard.update_column(:type, 'FinancialGenericAlphaScorecard')
    end
  end
end

迁移时我收到此错误。

==  UpdateFscScorecardsToShortTermFinancial: migrating ========================
rake aborted!
StandardError: An error has occurred, all later migrations canceled:

The single-table inheritance mechanism failed to locate the subclass:
'FinancialGenericAlphaScorecard'. This error is raised because the column
'type' is reserved for storing the class in case of inheritance. Please rename
this column if you didn't intend it to be used for storing the inheritance class or 
overwrite Scorecard.inheritance_column to use another column for that information./Users/Nexus/Work/toolkit/db/migrate/20150518133229_update_fsc_scorecards_to_short_term_financial.rb:3:in `up'
Tasks: TOP => db:migrate

我知道type列是保留的,但我没有更改列名,我只是更改记分卡的类型。这样做的最佳做法是什么?我可以看到,改变类型列中的内容是一种冒险行为。所有依赖项都有效,如果我要创建一个新的FinancialShortTermGenericAlphaScorecard,它可以正常工作。只查看较旧的FinancialGenericAlphaScorecard不起作用。因此我需要改变它的类型。

0 个答案:

没有答案