복붙노트

[RUBY-ON-RAILS] 3 마이그레이션 레일 : 참조 열을 추가?

RUBY-ON-RAILS

3 마이그레이션 레일 : 참조 열을 추가?

내가 가진 새로운 레일 3 마이그레이션을 작성하는 경우 (예를 들어)

rails g migration tester title:tester user:references

모든 내가의 라인을 따라 뭔가에 열을 추가하지만 경우 ... 잘 작동합니다 :

rails g migration add_user_to_tester user:references

레퍼런스 필드는 인식되지 않는다. 즉, 질문은 : 명령 줄에서 마이그레이션을 레일에 어떻게 참조 열을 추가하는 방법은 무엇입니까?

해결법

  1. ==============================

    1.당신이 레일을 사용하는 경우 지금과 같은 참조와 마이그레이션을 생성 할 수 있습니다 4.x의 :

    당신이 레일을 사용하는 경우 지금과 같은 참조와 마이그레이션을 생성 할 수 있습니다 4.x의 :

    rails generate migration AddUserRefToProducts user:references
    

    당신이 볼 수있는 것처럼 가이드 레일

  2. ==============================

    2.편집 : 이것은 오래된 대답과 레일 4.x의 +에 적용되어서는 안된다

    편집 : 이것은 오래된 대답과 레일 4.x의 +에 적용되어서는 안된다

    당신이 당신의 참조 클래스에 정수 ID를 사용할 수 있습니다 때 참조를 추가 할 필요가 없습니다.

    내가 대신 일반 정수의 참조를 사용의 장점은 모델 belongs_to와 미리 정의되고 모델이 이미 생성되어 있기 때문에 당신이 뭔가 기존 마이그레이션 할 때 영향을받지 않을 것입니다라고 말하고 싶지만, 목적은 종류의 손실이다.

    나는이 대신 같이 할 것이다 그래서 :

    rails g migration add_user_id_to_tester user_id:integer
    

    테스터 모델에서 사용자 : 그리고 수동 belongs_to 추가

  3. ==============================

    3.당신이 가장 가능성도 해당 컬럼에 인덱스를해야한다는주십시오 참고.

    당신이 가장 가능성도 해당 컬럼에 인덱스를해야한다는주십시오 참고.

    class AddUserReferenceToTester < ActiveRecord::Migration
      def change
        add_column :testers, :user_id, :integer
        add_index  :testers, :user_id
      end
    end
    
  4. ==============================

    4.앞의 두 단계는 위에서 언급 한, 당신은 여전히 ​​외래 키 제약 조건을 놓치고있어. 이 작업을해야합니다 :

    앞의 두 단계는 위에서 언급 한, 당신은 여전히 ​​외래 키 제약 조건을 놓치고있어. 이 작업을해야합니다 :

      class AddUserReferenceToTester < ActiveRecord::Migration
          def change
              add_column :testers, :user_id, :integer, references: :users
          end
      end
    
  5. ==============================

    5.당신은 변화 마이그레이션에 대한 참조를 사용할 수 있습니다. 이것은 유효한 레일을 3.2.13 코드입니다 :

    당신은 변화 마이그레이션에 대한 참조를 사용할 수 있습니다. 이것은 유효한 레일을 3.2.13 코드입니다 :

    class AddUserToTester < ActiveRecord::Migration
      def change
        change_table :testers do |t|
          t.references :user, index: true 
        end
      end
      def down
        change_table :testers do |t|
          t.remove :user_id
        end
      end
    end
    

    c.f : http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table

  6. ==============================

    6.레일을 g 마이그레이션 AddUserRefToSponsors 사용자를 실행 : 참조는 다음 마이그레이션을 생성합니다 :

    레일을 g 마이그레이션 AddUserRefToSponsors 사용자를 실행 : 참조는 다음 마이그레이션을 생성합니다 :

    def change
      add_reference :sponsors, :user, index: true
    end
    
  7. ==============================

    7.열을 추가 할 때 해당 열 정수를 만들 필요가 난간 규칙에 가능하면 스틱. 당신의 사건에 대한 그래서 나는 당신이 이미 테스터 및 사용자 모델, 테스터 및 사용자 테이블이 가정입니다.

    열을 추가 할 때 해당 열 정수를 만들 필요가 난간 규칙에 가능하면 스틱. 당신의 사건에 대한 그래서 나는 당신이 이미 테스터 및 사용자 모델, 테스터 및 사용자 테이블이 가정입니다.

    당신이 이름 USER_ID (규칙)과 정수 열을 만드는 데 필요한 외부 키를 추가하려면 :

    add_column :tester, :user_id, :integer
    

    그런 다음 테스터 모델에 belongs_to를 추가 :

    class Tester < ActiveRecord::Base
      belongs_to :user
    end
    

    그리고 당신은 또한 외부 키에 대한 인덱스를 추가 할 수 있습니다 (이 참조가 이미 당신을 위해하는 일입니다) :

    add_index :tester, :user_id
    
  8. ==============================

    8.즉, 트릭을 할 것입니다 :

    즉, 트릭을 할 것입니다 :

    rails g migration add_user_to_tester user_id:integer:index
    
  9. ==============================

    9.다음과 같은 방법으로 명령 줄을 통해 모델에 대한 참조를 추가 할 수 있습니다 :

    다음과 같은 방법으로 명령 줄을 통해 모델에 대한 참조를 추가 할 수 있습니다 :

    rails g migration add_column_to_tester user_id:integer
    

    이 같은 마이그레이션 파일을 생성합니다 :

    class AddColumnToTesters < ActiveRecord::Migration
      def change
        add_column :testers, :user_id, :integer
      end
    end
    

    이 작품은 내가 그것을 사용할 때마다 미세 ..

  10. ==============================

    10.레일 4

    레일 4

    발전기 (belongs_to 로서도 사용 가능) 참조로 열 입력을 받아 들인다.

    이 마이그레이션은 USER_ID 컬럼 적절한 인덱스를 생성합니다 :

    $ rails g migration AddUserRefToProducts user:references 
    

    생성 :

    class AddUserRefToProducts < ActiveRecord::Migration
      def change
        add_reference :products, :user, index: true
      end
    end
    

    http://guides.rubyonrails.org/active_record_migrations.html#creating-a-standalone-migration

    레일 3

    도우미는 (belongs_to로도 가능) 참조라고합니다.

    이 마이그레이션은 적절한 유형의 CATEGORY_ID 열을 생성합니다. 당신이 모델 이름이 아닌 열 이름을 전달합니다. 액티브 레코드는 당신을 위해 _id를 추가합니다.

    change_table :products do |t|
      t.references :category
    end
    

    당신이 다형성 belongs_to 연관이있는 경우 다음 참조 필요한 열을 모두 추가합니다 :

    change_table :products do |t|
      t.references :attachment, :polymorphic => {:default => 'Photo'}
    end
    

    사진의 기본 값을 가진 attachment_id 열 및 문자열 attachment_type 열을 추가합니다.

    http://guides.rubyonrails.org/v3.2.21/migrations.html#creating-a-standalone-migration

  11. from https://stackoverflow.com/questions/4954969/rails-3-migrations-adding-reference-column by cc-by-sa and MIT license