[RUBY-ON-RAILS] 어떻게 루비 레일에 이동에 열이 고유 인덱스 그것을해야합니까?
RUBY-ON-RAILS어떻게 루비 레일에 이동에 열이 고유 인덱스 그것을해야합니까?
나는 레일 마이그레이션 스크립트에 루비의 독특한 열을하고 싶습니다. 그것을 할 수있는 가장 좋은 방법은 무엇입니까? 또한 인덱스에 대한 방법은 테이블의 열이있다?
validate_uniqueness_of을 : 난 그냥 사용하는 것이 아니라 데이터베이스에 고유의 열을 시행하고 싶습니다.
해결법
-
==============================
1.짧은 대답 :
짧은 대답 :
add_index :table_name, :column_name, unique: true
함께 인덱스 여러 컬럼에, 당신은 대신에 하나의 열 이름의 열 이름의 배열을 전달
add_index :table_name, [:column_name_a, :column_name_b], unique: true
미세한 그레인 제어를 들어, 바로 SQL을 실행하는 방법을 "실행"이있다.
즉입니다!
당신이 정기적으로 오래된 모델 검증을위한 대체이 일을하는 경우라면, 그것이 어떻게 작동하는지 확인하십시오. 나는 사용자에게 오류보고가 좋은대로 될 것입니다 확실하지 않다. 당신은 항상 모두를 할 수 있습니다.
-
==============================
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.이 아직 언급하지만이 페이지를 발견했을 때 내가 가진 질문에 대한 답되지 않았기 때문에, 당신은 또한 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.새 테이블을 작성하는 경우, 인라인 바로 가기를 사용할 수 있습니다 :
새 테이블을 작성하는 경우, 인라인 바로 가기를 사용할 수 있습니다 :
def change create_table :posts do |t| t.string :title, null: false, index: { unique: true } t.timestamps end end
-
==============================
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.
add_index :table_name, :column_name, unique: true
함께 인덱스 여러 열하려면 열 이름 대신 하나의 열 이름의 배열을 전달합니다.
-
==============================
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.당신은 DB 컬럼에 고유 한 추가 놓친 경우 필드가 고유 한 경우, 단지 확인하려면 모델이 유효성 검사를 추가 :
당신은 DB 컬럼에 고유 한 추가 놓친 경우 필드가 고유 한 경우, 단지 확인하려면 모델이 유효성 검사를 추가 :
class Person < ActiveRecord::Base validates_uniqueness_of :user_name end
여기 참조 @Nate에 의해 제안 위 목적을 테스트 만, DB 컬럼을 변경하여 인덱스를 추가하시기 바랍니다있다
자세한 내용은 색인이를 참조하시기 바랍니다
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
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 레일 - 중첩은 활성 레코드에 포함? (0) | 2020.02.10 |
---|---|
[RUBY-ON-RAILS] 오류 : 설치 libv8를 오류 빌드 보석 네이티브 확장에 실패 (0) | 2020.02.10 |
[RUBY-ON-RAILS] 3.1.0 ActionView :: 템플릿 :: 오류 (application.css가 미리 컴파일되지 않음) 레일 (0) | 2020.02.10 |
[RUBY-ON-RAILS] 랙 미들웨어는 무엇입니까? (0) | 2020.02.10 |
[RUBY-ON-RAILS] 왜 문자열 # GSUB 이중 컨텐츠를합니까? (0) | 2020.02.10 |