2

Domain_Dataという一意の文字列列を持つ というテーブルがありますdomain。アプリ全体で多くのものがドメインを指す必要があるためDomain、独自の別のモデルに分離します。で、列を への外部キー ポインタにDomain_Data置き換えたいと考えています。トリッキーな部分は、ドメイン文字列が にあり、ポインターが にあるように、データ自体を更新することです。domainDomain.idDomainidDomain_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 に答える