我正在更改現有應用程序中使用STI擴展的基本模型的inheritance_column
值。如何編寫遷移以使現有列符合新的inheritance_column
?Rails inheritance_column migration
這是我第一次嘗試:
class MigrateStoryTypes < ActiveRecord::Migration
def self.up
Story.all.each { |story|
new_story_type = story.story_type.camelize + 'Story'
puts "changing #{story.id}'s story_type from #{story.story_type} to #{new_story_type}"
story.update_column :story_type, new_story_type
}
end
def self.down
Story.all.each { |story|
new_story_type = story.story_type.underscore.gsub /_story/, ''
puts "changing #{story.id}'s story_type from #{story.story_type} to #{new_story_type}"
story.update_column :story_type, new_story_type
}
end
end
然而,這種失敗:
的ActiveRecord :: SubclassNotFound:單表繼承機制 未能找到該子類: 'clean_slate'。由於列'story_type'被保留用於存儲繼承的 類中的類,因此此錯誤被提出 。如果您不打算使用 來存儲繼承類或覆蓋 Story.inheritance_column以使用該信息的另一列,請重命名此列。
是否有直接通過ActiveRecord執行此操作的方法,還是需要使用臨時列,SQL等?
因此,您已經有一個'story_type'列,其中包含類名稱的下劃線版本(即''clean_slate''),現在您想將其移至STI,使用'story_type'作爲STI列,並將'story_type'的值給類名?你目前有多少個'story_type'值? –
@ muistooshort正是。我目前有兩個'story_type'值。 – pdoherty926