복붙노트

[RUBY-ON-RAILS] 어떻게 루비 레일에 이동에 열이 고유 인덱스 그것을해야합니까?

RUBY-ON-RAILS

어떻게 루비 레일에 이동에 열이 고유 인덱스 그것을해야합니까?

나는 레일 마이그레이션 스크립트에 루비의 독특한 열을하고 싶습니다. 그것을 할 수있는 가장 좋은 방법은 무엇입니까? 또한 인덱스에 대한 방법은 테이블의 열이있다?

validate_uniqueness_of을 : 난 그냥 사용하는 것이 아니라 데이터베이스에 고유의 열을 시행하고 싶습니다.

해결법

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

    1.짧은 대답 :

    짧은 대답 :

    add_index :table_name, :column_name, unique: true
    

    함께 인덱스 여러 컬럼에, 당신은 대신에 하나의 열 이름의 열 이름의 배열을 전달

    add_index :table_name, [:column_name_a, :column_name_b], unique: true
    

    미세한 그레인 제어를 들어, 바로 SQL을 실행하는 방법을 "실행"이있다.

    즉입니다!

    당신이 정기적으로 오래된 모델 검증을위한 대체이 일을하는 경우라면, 그것이 어떻게 작동하는지 확인하십시오. 나는 사용자에게 오류보고가 좋은대로 될 것입니다 확실하지 않다. 당신은 항상 모두를 할 수 있습니다.

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

    2.또는

    또는

    생성

    class AddIndexToModerators < ActiveRecord::Migration
      def change
        add_column :moderators, :username, :string
        add_index :moderators, :username, unique: true
      end
    end
    

    기존 열을 제거하려면 인덱스를 추가하거나 add_column 라인을 언급하는 경우, 또는 검사에 넣어

    add_column :moderators, :username, :string unless column_exists? :moderators, :username
    
  3. ==============================

    3.이 아직 언급하지만이 페이지를 발견했을 때 내가 가진 질문에 대한 답되지 않았기 때문에, 당신은 또한 t.references 또는 t.belongs_to 통해를 추가 할 때 인덱스가 고유해야 지정할 수 있습니다 :

    이 아직 언급하지만이 페이지를 발견했을 때 내가 가진 질문에 대한 답되지 않았기 때문에, 당신은 또한 t.references 또는 t.belongs_to 통해를 추가 할 때 인덱스가 고유해야 지정할 수 있습니다 :

    create_table :accounts do |t|
      t.references :user, index: { unique: true } # or t.belongs_to
    
      # other columns...
    end
    

    (현재로는 적어도 4.2.7 레일)

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

    4.새 테이블을 작성하는 경우, 인라인 바로 가기를 사용할 수 있습니다 :

    새 테이블을 작성하는 경우, 인라인 바로 가기를 사용할 수 있습니다 :

      def change
        create_table :posts do |t|
          t.string :title, null: false, index: { unique: true }
          t.timestamps
        end
      end
    
  5. ==============================

    5.나는 레일 5를 사용하고 있는데 위의 대답은 잘 작동; 또한 여기에 나를 위해 일한 또 다른 방법입니다 (: 사람과 열 이름입니다 : 테이블 이름입니다 EMAIL_ADDRESS)

    나는 레일 5를 사용하고 있는데 위의 대답은 잘 작동; 또한 여기에 나를 위해 일한 또 다른 방법입니다 (: 사람과 열 이름입니다 : 테이블 이름입니다 EMAIL_ADDRESS)

    class AddIndexToEmailAddress < ActiveRecord::Migration[5.0]
      def change
        change_table :people do |t|
          t.index :email_address, unique: true
        end
      end
    end
    
  6. ==============================

    6.

    add_index :table_name, :column_name, unique: true
    

    함께 인덱스 여러 열하려면 열 이름 대신 하나의 열 이름의 배열을 전달합니다.

  7. ==============================

    7.당신은 레일하여 기본 unique_key 이름이 너무 긴 DB 오류를 던질 수있는이 될 수 여러 번 고유 키의 이름을 추가 할 수 있습니다.

    당신은 레일하여 기본 unique_key 이름이 너무 긴 DB 오류를 던질 수있는이 될 수 여러 번 고유 키의 이름을 추가 할 수 있습니다.

    옵션 : 당신의 인덱스에 이름을 추가하려면 단지 이름을 사용합니다. 마이그레이션 쿼리는 다음과 같이 보일 수 있습니다 -

    add_index 등 : TABLE_NAME, [: column_name_a : column_name_b, ... : column_name_n], 독특한 : 사실, 이름 : 'my_custom_index_name'

    추가 정보 - http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/add_index

  8. ==============================

    8.당신은 DB 컬럼에 고유 한 추가 놓친 경우 필드가 고유 한 경우, 단지 확인하려면 모델이 유효성 검사를 추가 :

    당신은 DB 컬럼에 고유 한 추가 놓친 경우 필드가 고유 한 경우, 단지 확인하려면 모델이 유효성 검사를 추가 :

    class Person < ActiveRecord::Base
      validates_uniqueness_of :user_name
    end
    

    여기 참조 @Nate에 의해 제안 위 목적을 테스트 만, DB 컬럼을 변경하여 인덱스를 추가하시기 바랍니다있다

    자세한 내용은 색인이를 참조하시기 바랍니다

  9. from https://stackoverflow.com/questions/1449459/how-do-i-make-a-column-unique-and-index-it-in-a-ruby-on-rails-migration by cc-by-sa and MIT license