Rails Migration (MySQL)에서 새 열의 위치를 지정할 수 있습니까?
MySQL을 통해 열을 추가하는 경우 테이블에서 해당 열이 AFTER 수정자를 사용할 위치를 지정할 수 있습니다. 그러나 Rails 마이그레이션을 통해 add_column을 수행하면 테이블 끝에 열이 생성됩니다.
레일 마이그레이션에서 추가 된 열의 위치를 지정하는 기능이 있습니까?
이제 Rails 2.3.6+에서 : after 매개 변수를 전달하여 가능합니다.
이 기능의 이점을 보지 못하는 모든 사람에게 : ORM 외부에서 데이터베이스를 보지 않습니까? 어떤 종류의 UI로든 볼 때 외래 키, 상태 열, 플래그 등을 모두 함께 그룹화하는 것을 좋아합니다. 이것은 응용 프로그램에 영향을 미치지 않지만 데이터 검토 능력을 확실히 향상시킵니다.
물론 넌 할 수있어.
짧은 대답:
add_column :users, :gender, :string, :after => :column_name
긴 대답 :
다음은 " users "테이블에 " username " 열 뒤에 " 성별 " 열을 추가하려는 경우의 예 입니다.
- 유형
rails g migration AddGenderToUser gender:string
생성 된 마이그레이션에 " after => : username "을 추가 하면 다음과 같이 표시됩니다.
class AddSlugToDictionary < ActiveRecord::Migration def change add_column :users, :gender, :string, :after => :username end end
이 추가 기능을 ActiveRecord Mysql 어댑터에 추가하는 패치를 만들었습니다. 마스터 및 2-3-stable에서 작동합니다.
mysql에 따라 다를 수 있지만 마이그레이션을 덜 이식성있게 만들지는 않습니다 (다른 어댑터는 추가 위치 지정 옵션을 무시합니다).
add_column
마이그레이션 에서 방법에 대한 위치 옵션이없는 것 같습니다 . 그러나 마이그레이션은 리터럴 SQL 실행을 지원합니다. 저는 Rails 개발자는 아니지만 다음과 같습니다.
class AddColumnAfterOtherColumn < ActiveRecord::Migration
def self.up
execute "ALTER TABLE table_name ADD COLUMN column_name INTEGER
AFTER other_column"
end
def self.down
remove_column :table_name, :column_name
end
end
Rails 내에서 열의 위치를 지정할 방법이 없습니다. 실제로 마이그레이션에서 이름이 지정된 순서대로 열이 생성되는 것은 우연 일뿐 (따라서 신뢰할 수 없음)이라고 생각합니다.
테이블 내 열의 순서는 거의 관련이 있으며 그렇게되어야합니다. 주어진 일반적인 "이유"는 "SELECT *"를 실행할 때 특정 하위 집합을 볼 수 있기위한 것이지만, 그다지 좋은 이유는 아닙니다.
다른 이유는 아마도 디자인 냄새 일 것입니다.하지만 제가 틀린 이유를 알고 싶습니다!
일부 플랫폼에서는 NULL이 될 가능성이 가장 높은 열을 끝까지 넣음으로써 얻을 수있는 (최소한) 공간 및 성능 절약이 있습니다 (DMBS는 "후행"NULL 값에 디스크 공간을 사용하지 않기 때문입니다. 눈치 채려면 1980 년대 하드웨어에서 실행해야한다고 생각합니다.
'developer tip' 카테고리의 다른 글
로거에 대한 핸들러를 찾을 수 없습니다. (0) | 2021.01.07 |
---|---|
.NET의 디버그 대 릴리스 (0) | 2021.01.07 |
Joda-Time을 사용하여 주어진 달의 일수를 어떻게 얻습니까? (0) | 2021.01.07 |
자바에서 큰 따옴표 이스케이프 (0) | 2021.01.07 |
Django-간단한 사용자 정의 템플릿 태그 예제 (0) | 2021.01.07 |