답변:
이전 버전의 Rails에 대한 간단한 답변
add_index :table_name, :column_name, unique: true
여러 열을 함께 색인화하려면 단일 열 이름 대신 열 이름 배열을 전달합니다.
add_index :table_name, [:column_name_a, :column_name_b], unique: true
"인덱스 이름 ...이 너무 깁니다" name: "whatever"
가 표시되면 add_index 메소드에 추가 하여 이름을 더 짧게 만들 수 있습니다 .
세밀한 제어를 위해 execute
직선 SQL을 실행 하는 " "메소드가 있습니다.
그게 다야!
기존의 기존 모델 유효성 검사를 대신하여이 작업을 수행하는 경우 작동 방식을 확인하십시오. 모델 수준의 유효성 검사가 없으면 사용자에게 오류를보고하는 것이 좋지 않을 것입니다. 당신은 항상 둘 다 할 수 있습니다.
indexed columns are not unique
고유 인덱스를 만들려고 할 때 오류를 테이블의 데이터가 이미 중복이 포함되어 있기 때문에, 그것은 수 있습니다. 중복 데이터를 제거하고 마이그레이션을 다시 실행하십시오.
, :name => "whatever"
가 표시되면 add_index
메소드에 추가 하여 이름을 더 짧게 만들 수 있습니다 .
레일 생성 마이그레이션 add_index_to_table_name column_name : uniq
또는
레일 생성 마이그레이션 add_column_name_to_table_name column_name : string : uniq : index
생성
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
add_index...
하고 아닌 경우에도 열을 추가하는 것은 바보입니다 add_column...
.
레일별로 기본 unique_key 이름이 너무 길어 DB가 오류를 발생시킬 수 있으므로 고유 키의 이름을 여러 번 추가 할 수 있습니다.
색인 이름을 추가하려면 name:
옵션을 사용하십시오 . 마이그레이션 쿼리는 다음과 같습니다.
add_index :table_name, [:column_name_a, :column_name_b, ... :column_name_n], unique: true, name: 'my_custom_index_name'
추가 정보-http: //apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/add_index
DB 열에 고유 한 항목을 추가하지 못한 경우 모델에서이 유효성 검사를 추가하여 필드가 고유한지 확인하십시오.
class Person < ActiveRecord::Base
validates_uniqueness_of :user_name
end
여기를 참조 위는 목적을 테스트하기 위해, 추가하시기 바랍니다되는 인덱스를 @Nate에 의해 제안 변경 DB 컬럼에 의해
자세한 내용 은 색인 을 참조하십시오