복붙노트

[RUBY-ON-RAILS] 레일에서 참조 열 이동을 추가 4

RUBY-ON-RAILS

레일에서 참조 열 이동을 추가 4

사용자는 많은 업로드를 가지고있다. 나는 업로드 테이블에 해당하는 참조를 사용자에게 열을 추가하고 싶습니다. 무엇처럼 마이그레이션 모양을해야합니까?

여기에 내가 가진 것입니다. USER_ID, : INT 또는 (2) : 사용자 : 참조 나는 (1)를 사용하는 경우는 확실하지 않다. 난 확인 (2) 작동하는지 모르겠어요. 그냥이에게 "레일"방법을하려고합니다.

class AddUserToUploads < ActiveRecord::Migration
  def change
    add_column :uploads, :user_id, :integer
  end
end

레일 3. 레일 3 마이그레이션을 제외한 관련 질문 : 참조 열을 추가?

해결법

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

    1.4.x의 레일

    4.x의 레일

    당신은 이미 사용자 및 업로드 테이블이 그들 사이에 새로운 관계를 추가 할 때.

    당신이 할 필요가있다 : 바로 다음 명령을 사용하여 마이그레이션을 생성합니다 :

    rails g migration AddUserToUploads user:references
    

    어떤 마이그레이션 파일로 생성합니다 :

    class AddUserToUploads < ActiveRecord::Migration
      def change
        add_reference :uploads, :user, index: true
      end
    end
    

    그런 다음, 레이크 DB를 사용하여 마이그레이션을 실행하여 마이그레이션을. 이 마이그레이션은 업로드 테이블 (사용자 테이블에서 id 컬럼을 참조)에 USER_ID라는 새 열을 추가 처리됩니다, PLUS 또한 새로운 컬럼에 인덱스를 추가합니다.

    UPDATE [레일 4.2 대]

    레일은 참조 무결성을 유지하기 위해 신뢰할 수 없습니다; 관계형 데이터베이스는 여기에 우리의 구조에 온다. 무슨 의미하는 것은 우리가 데이터베이스 레벨 자체에서 외래 키 제약 조건을 추가하고이 세트 참조 무결성을 위반하는 작업을 거부 할 것이라고 데이터베이스를 보장 할 수 있다는 것입니다. @infoget은 주석으로, 외래 키에 대한 기본 지원 (참조 무결성) 4.2 배를 레일. 그것은 필요하지거야하지만 당신은 (아주 유용으로) 우리가 위에서 만든 기준에 외래 키를 추가 할 수 있습니다.

    기존의 참조에 외래 키를 추가하려면, 외부 키를 추가 할 수있는 새로운 마이그레이션을 작성 :

    class AddForeignKeyToUploads < ActiveRecord::Migration
      def change
        add_foreign_key :uploads, :users
      end
    end
    

    (레일 4.2) 외래 키를 가진 완전히 새로운 기준을 만들려면 다음 명령을 사용하여 마이그레이션을 생성합니다 :

    rails g migration AddUserToUploads user:references
    

    이는 마이그레이션 파일로 생성합니다 :

    class AddUserToUploads < ActiveRecord::Migration
      def change
        add_reference :uploads, :user, index: true
        add_foreign_key :uploads, :users
      end
    end
    

    이것은 업로드 테이블의 USER_ID 컬럼에 새 외래 키를 추가합니다. 핵심은 사용자 테이블의 id 컬럼을 참조합니다.

    참고 :이 여전히 (같은 마이그레이션 또는 별도의 마이그레이션 파일에서 외부 키를 만들 수 있습니다) 먼저 외래 키 참조를 만들 필요가 있으므로 참조를 추가하는 것 외에도입니다. 액티브 레코드는 단일 열 외래 키와 현재는 MySQL은, mysql2을 지원하며, PostgreSQL의 어댑터가 지원됩니다. 등 sqlite3를 같은 다른 어댑터와 함께이 시도하지 마십시오 레일 가이드를 참조하십시오 : 외래 키를 참조하십시오.

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

    2.당신은 여전히 ​​마이그레이션을 만들려면이 명령을 사용할 수 있습니다 :

    당신은 여전히 ​​마이그레이션을 만들려면이 명령을 사용할 수 있습니다 :

    rails g migration AddUserToUploads user:references
    

    마이그레이션 이전에 비트 다른 보이는,하지만 여전히 작동합니다 :

    class AddUserToUploads < ActiveRecord::Migration[5.0]
      def change
        add_reference :uploads, :user, foreign_key: true
      end
    end
    

    참고이 있다고 : 사용자,하지 : USER_ID

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

    3.당신이 경우 위로 및 방법이 시도 아래로 또 다른 방법 같은 :

    당신이 경우 위로 및 방법이 시도 아래로 또 다른 방법 같은 :

      def up
        change_table :uploads do |t|
          t.references :user, index: true
        end
      end
    
      def down
        change_table :uploads do |t|
          t.remove_references :user, index: true
        end
      end
    
  4. ==============================

    4.[사용 레일 5]

    [사용 레일 5]

    마이그레이션을 생성합니다 :

    rails generate migration add_user_reference_to_uploads user:references
    

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

    class AddUserReferenceToUploads < ActiveRecord::Migration[5.1]
      def change
        add_reference :uploads, :user, foreign_key: true
      end
    end
    

    스키마 파일을 준수하면 이제 당신은 업로드 테이블에 새로운 필드를 포함하는 것을 볼 수 있습니다. t.bigint "USER_ID"또는 t.integer "USER_ID"같은 뭔가.

    마이그레이션 데이터베이스 :

    rails db:migrate
    
  5. ==============================

    5.같은 일을하고 또 다른 구문은 다음과 같습니다

    같은 일을하고 또 다른 구문은 다음과 같습니다

    rails g migration AddUserToUpload user:belongs_to
    
  6. ==============================

    6.누군가가 같은 문제가있는 경우 그냥 문서화하는 ...

    누군가가 같은 문제가있는 경우 그냥 문서화하는 ...

    내 상황에서 나는 사용하고했습니다 UUID 필드를 답변 위의 레일 때문에 5를 사용하여 열을 만드는, 내 경우에 작동하지 않습니다 BIGINT를 대신 : UUID :

    add_column :uploads, :user_id, :uuid
    add_index :uploads, :user_id
    add_foreign_key :uploads, :users
    
  7. from https://stackoverflow.com/questions/22815009/add-a-reference-column-migration-in-rails-4 by cc-by-sa and MIT license