복붙노트

[RUBY-ON-RAILS] 레일 모델에 외래 키 추가

RUBY-ON-RAILS

레일 모델에 외래 키 추가

나는 레일 아주 새로운 해요 및 행운과 밤새에서이 문제를 해결하려고 노력하고있다.

사용자, 기업 및 business_hours : 나는 3 개 모델을 만들었습니다. 나는 또한 협회 (사용자 belongs_to 기업 belongs_to business_hours) 및 (사용자 has_one 사업 has_many의 business_hours)을 추가했습니다.

워드 프로세서를 통해 읽기 온라인 내가 지금 내 DB 테이블의 이러한 관계에 대한 외래 키를 만들 필요가 보인다. 어떻게하면이 사용 레일 액티브 마이그레이션해야합니까? 내 DB로 PostgreSQL을 사용하고 있습니다.

해결법

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

    1.우선 당신은 단어의 끝에 S를 사용하지 않는 방법 belongs_to 사용할 때 : business_hours를 비즈니스 belongs_to하는 사용자 belongs_to.

    우선 당신은 단어의 끝에 S를 사용하지 않는 방법 belongs_to 사용할 때 : business_hours를 비즈니스 belongs_to하는 사용자 belongs_to.

    이제 마이그레이션을 만듭니다

    rails generate migration migration_name
    

    그리고 마이그레이션에 열을 추가 :

    class MigrationName < ActiveRecord::Migration
      def change
        add_foreign_key :business_hours, :businesses
        add_foreign_key :businesses, :users
      end
    end
    

    실행 레이크 DB : 마이그레이션. 이게 다예요.

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

    2.이 데이터베이스 외부 키를 추가하지 않는 한이에 현재 허용 대답은 정말 정확하지 않습니다. 그냥 정수 열을 추가합니다.

    이 데이터베이스 외부 키를 추가하지 않는 한이에 현재 허용 대답은 정말 정확하지 않습니다. 그냥 정수 열을 추가합니다.

    레일 4.2.x를에서, 현재의 접근 방식은 다음과 같습니다

    http://guides.rubyonrails.org/active_record_migrations.html#foreign-keys

    마이그레이션을 만들기 :

    rails generate migration migration_name
    

    기존 C 럼의 경우, 마이그레이션이 같은 외부 키를 추가합니다 :

    class MigrationName < ActiveRecord::Migration
      def change
        add_foreign_key :business_hours, :businesses
        add_foreign_key :businesses, :users
      end
    end
    

    레일 4.x의 또는 새 열을 추가하고 당신은 아마 또한 사실로 인덱스를 지정할 곳을, 할 수있는 외래 키가되고 싶어요,하지만 외래 키에 대한 요구 사항의 일부가 아니다하는 경우 :

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

    class MigrationName < ActiveRecord::Migration
      def change
        add_reference :business_hours, :business, index: true, foreign_key: true
        add_reference :businesses, :user, index: true, foreign_key: true
      end
    end
    
  3. ==============================

    3.내가 PostgreSQL을 함께 시도하지 않은하지만 MySQL의 레일에 적어도 외부 키를 생성하지 마십시오, 내가 진짜 데시벨 수준의 외래 키는 없습니다 의미한다. 자신이 만든 모든 것은 규칙에 따라 이름이 정수입니다. 상자 밖으로 당신이 (빠른 조회에)이 가짜 외래 키에 인덱스를하지 않고 더 데시벨 수준의 참조 무결성 검사도 없다는 것을 의미한다. 당신이 좋아하는 일을 할 필요가 얻으려면 :

    내가 PostgreSQL을 함께 시도하지 않은하지만 MySQL의 레일에 적어도 외부 키를 생성하지 마십시오, 내가 진짜 데시벨 수준의 외래 키는 없습니다 의미한다. 자신이 만든 모든 것은 규칙에 따라 이름이 정수입니다. 상자 밖으로 당신이 (빠른 조회에)이 가짜 외래 키에 인덱스를하지 않고 더 데시벨 수준의 참조 무결성 검사도 없다는 것을 의미한다. 당신이 좋아하는 일을 할 필요가 얻으려면 :

    ALTER TABLE your_table ADD CONSTRAINT fk_whatever_you_want_to_name_it FOREIGN KEY   (foreign_key_name) REFERENCES another_table(its_primary_key)
    

    레일 마이그레이션에서 당신은 "실행"기능에 문자열 인수로이 전달할 수 있습니다. "진짜"외래 키를 추가하면 자동으로 인덱스를 생성합니다. 나를 위해 적어도이 다소 불쾌한 놀라움이었다.

  4. ==============================

    4.5 이제 마이그레이션에서 외래 키를 추가 할 수 있습니다 난간, http://devdocs.io/rails~5.0/activerecord/connectionadapters/schemastatements#method-i-add_foreign_key를 참조하십시오. 그래서

    5 이제 마이그레이션에서 외래 키를 추가 할 수 있습니다 난간, http://devdocs.io/rails~5.0/activerecord/connectionadapters/schemastatements#method-i-add_foreign_key를 참조하십시오. 그래서

     add_foreign_key :articles, :authors
    

    생성

     ALTER TABLE "articles" ADD CONSTRAINT fk_rails_e74ce85cbc FOREIGN KEY ("author_id") REFERENCES "authors" ("id")
    

    가 아닌 표준 데이터 모델을 사용하는 경우에는 당신은 할 수 있습니다.

     add_foreign_key :articles, :users, column: :author_id, primary_key: "lng_id"
    

    이는 생성

     ALTER TABLE "articles" ADD CONSTRAINT fk_rails_58ca3d3a82 FOREIGN KEY ("author_id") REFERENCES "users" ("lng_id")
    
  5. from https://stackoverflow.com/questions/16257116/adding-foreign-key-to-a-rails-model by cc-by-sa and MIT license