[ruby-on-rails] Rails : 열 추가 후 인덱스 추가
table
Rails 앱에서 테이블 을 만들었다 고 가정 해 보겠습니다. 얼마 후 실행중인 열을 추가합니다.
rails generate migration AddUser_idColumnToTable user_id:string.
그런 다음 user_id
색인 으로 추가해야한다는 것을 깨달았습니다 . add_index
메서드 에 대해 알고 있지만이 메서드를 어디에서 호출해야합니까? 마이그레이션을 실행해야합니까 (그렇다면 어느 것이 있습니까?).이 방법을 직접 추가해야합니까?
답변
인덱스에 대해서만 다른 마이그레이션을 실행할 수 있습니다.
class AddIndexToTable < ActiveRecord::Migration
def change
add_index :table, :user_id
end
end
답변
를 생성해야하는 경우 user_id
사용자 테이블을 참조하는 것이 합리적이라고 가정합니다. 이 경우 마이그레이션은 다음과 같습니다.
rails generate migration AddUserRefToProducts user:references
이 명령은 다음 마이그레이션을 생성합니다.
class AddUserRefToProducts < ActiveRecord::Migration
def change
add_reference :user, :product, index: true
end
end
실행 한 후 rake db:migrate
둘 다를 user_id
컬럼과 인덱스에 추가됩니다 products
테이블.
경우 당신은 기존 열 예에 인덱스를 추가 할 필요가 name
의 user
다음과 같은 기술이 도움이 될 수 있습니다 테이블 :
rails generate migration AddIndexToUsers name:string:index
다음 마이그레이션을 생성합니다.
class AddIndexToUsers < ActiveRecord::Migration
def change
add_column :users, :name, :string
add_index :users, :name
end
end
add_column
줄을 삭제 하고 마이그레이션을 실행하십시오.
설명 된 경우 rails generate migration AddIndexIdToTable index_id:integer:index
명령 을 발행 한 다음 add_column
생성 된 마이그레이션에서 라인 을 삭제할 수 있습니다 . 하지만 차라리 초기 마이그레이션을 실행 취소하고 대신 참조를 추가하는 것이 좋습니다.
rails generate migration RemoveUserIdFromProducts user_id:integer
rails generate migration AddUserRefToProducts user:references
답변
다음 열을 생성 한 후 생성 된 마이그레이션에 추가합니다 (예제).
add_index :photographers, :email, :unique => true
답변
참조를 위해 전화 할 수 있습니다
rails generate migration AddUserIdColumnToTable user:references
나중에 일반 색인을 추가해야하는 경우이를 시작할 수 있습니다.
rails g migration AddOrdinationNumberToTable ordination_number:integer:index
코드 생성 :
class AddOrdinationNumberToTable < ActiveRecord::Migration
def change
add_column :tables, :ordination_number, :integer
add_index :tables, :ordination_number, unique: true
end
end
답변
이것을 사용할 수 있습니다. Job이 인덱스 cader_id를 추가하는 모델의 이름이라고 생각하면됩니다 .
class AddCaderIdToJob < ActiveRecord::Migration[5.2]
def change
change_table :jobs do |t|
t.integer :cader_id
t.index :cader_id
end
end
end