2

我有一个名为的表Domain_Data,其中有一个名为domain. 因为在我的应用程序中很多东西都需要指向域,所以我将分离Domain到它自己的单独模型。在Domain_Data我想domain用指向Domain.id. 棘手的部分是更新数据本身,以便域字符串位于 中Domain,而id指针位于 中Domain_Data

我很清楚如何在纯 SQL 中进行这样的迁移,但我想知道“Railsy”的方式是什么来进行这样的迁移。这一切都可以通过迁移完成,还是应该通过 rake 任务等手动完成?

我是 Rails 新手,正在寻找进行此类迁移的规范方法。使用 Rails 2.3

4

1 回答 1

0

您将遇到一些命名空间问题,因为您的新域关联需要进行一些重命名。迁移也可以运行 ruby​​ 代码,因此您的迁移可能看起来像这样

以下是所需的通用代码。

 # First Migration to rename the domain field
    def RenameDomainField < ActiveRecord::Migration
      def self.up
        rename_column :domain_datas, :domain, :domain_name
      end

      def self.down
        #code for opposite of up
      end

    end


    # Second Migration to add the Domain model
    def CreateDomains < ActiveRecord::Migration
      def self.up
        create_table :domain do |t|
          t.string :domain_name
        end
      end

      def self.down
        #code for opposite of up
      end

    end

    #Create a new relationship:
    def DomainData < ActiveRecord::Base
      belongs_to :domain
    end


    # A third migration to move the data over
    def RefactorDomainData < ActiveRecord::Migration
      def self.up
        #Add the new forgein key
        add_column :domain_datas, :domain_id, :integer

        #create the new domain records and link them
        DomainData.all do |domain_data|
          domain_data.create_domain(:domain_name => domain_data.domain_name)
        end

        #trash the old column
        remove_column :domain_datas, :domain_name
      end

      def self.down
        #code for opposite of up
      end

    end
于 2012-05-30T20:03:49.863 回答