Rake가 있는 활성 레코드 테이블
4797 단어 migrationsactiverecordruby
마이그레이션 만들기
rake db:create_migration NAME=create_student_table
이 명령은 db/migrations
에 새 마이그레이션 파일을 생성합니다. 파일 이름은 명령줄에 입력한 이름 앞에 타임스탬프로 지정됩니다. 이 타임스탬프는 레코드 키퍼 역할을 하며 마이그레이션할 때 마이그레이션 파일이 올바른 순서로 실행되도록 합니다. 나중에 자세히 설명합니다.이 새 파일을 열면 CreateStudentTable이 생성된 새 클래스가 표시됩니다. 이 클래스는 ActiveRecord::Migration 모듈에서 자동으로 상속됩니다. 이 클래스에는 처음에 비어 있는 생성된 변경 메서드가 있습니다. ActiveRecord 마이그레이션에 대한 RailsGuide는 다음과 같이 말합니다. “변경 방법은 마이그레이션을 작성하는 기본 방법입니다. Active Record가 마이그레이션 작업을 자동으로 되돌리는 방법을 알고 있는 대부분의 경우에 작동합니다.” 지원을 변경하는 몇 가지 작업은 create_table, add_column, remove_column 및 change_column입니다.
class CreateStudentTable < ActiveRecord::Migration[6.1]
def change
end
end
테이블을 만들려면 create_table 다음에 테이블 이름을 기호로 사용합니다. 테이블 이름은 복수형이어야 합니다. 블록 매개변수 뒤에 코드 블록이 추가됩니다
t
. 이렇게 하면 이 테이블에 테이블 열을 추가할 수 있습니다. 필요한 구문은 t.data_type 뒤에 열 이름이 기호로 오는 형식입니다. 기본 키가 아래에 나열되지 않은 것을 알 수 있습니다. ActiveRecord는 테이블이 생성될 때 기본 키 열을 자동으로 생성합니다. 나중에 추가되는 각 행에 대해 기본 키가 자동으로 증가합니다.class CreateStudentTable < ActiveRecord::Migration[6.1]
def change
create_table :students do |t|
t.string :name
t.string :address
t.integer :phone
t.string :email
t.string :school_name
t.string :grade
t.string :teacher_name
end
end
end
마이그레이션 실행
create_table 메소드가 완료되면 마이그레이션을 실행할 시간입니다. 명령
rake db:migrate
으로 인해 몇 가지 일이 발생합니다. 먼저, 아직 존재하지 않는 경우 ActiveRecord를 사용하여 새 데이터베이스 파일이 생성됩니다. 데이터베이스는 db/migrate
폴더에 제공된 코드를 사용하여 업데이트됩니다. 이 경우 적절한 열이 있는 테이블을 만듭니다. 마지막으로 schema.rb
폴더에 db
파일을 생성합니다. 이 파일에는 데이터베이스의 현재 상태에 대한 미리 보기가 있습니다. 다음은 db/schema.rb
파일의 모양입니다. 버전 번호는 마이그레이션 파일의 타임스탬프에 해당합니다. 나열된 열 이름은 마이그레이션 파일에 제공된 것과 동일해야 합니다. 이 파일을 보는 것은 마이그레이션이 성공했는지 확인하는 한 가지 방법입니다.ActiveRecord::Schema.define(version: 2022_10_12_152607) do
create_table "students", force: :cascade do |t|
t.string "name"
t.string "address"
t.integer "phone"
t.string "email"
t.string "school_name"
t.string "grade"
t.string "teacher_name"
end
end
마이그레이션이 성공했는지 확인하는 또 다른 방법은
rake db:migrate:status
를 실행하는 것입니다.database: db/development.sqlite3
Status Migration ID Migration Name
--------------------------------------------------
up 20221012152607 Create student table
마이그레이션이 활성이면 상태가 표시됩니다
up
. 이 상태는 데이터베이스가 성공적으로 업데이트되었음을 나타냅니다.테이블 변경
어... "등급"에 대한 데이터 유형을 문자열로 사용하면 몇 가지 문제가 발생할 수 있습니다. 등급은 몇 가지 다른 방법으로 작성될 수 있으며 이는 약간의 혼란을 야기할 수 있습니다. 대신 이 데이터 유형을 정수로 변경해 보겠습니다. 시작하려면 새 마이그레이션을 생성해야 합니다.
rake db:create_migration NAME=change_grade_data_type
. 이 마이그레이션 파일에 다음을 추가합니다.class ChangeGradeDataType < ActiveRecord::Migration[6.1]
def change
change_column(:students, :grade, :integer)
end
end
열 변경 방법을 사용하여 변경하려는 테이블 이름, 열 이름 및 데이터 유형을 전달할 수 있습니다. 이제
rake db:migrate
를 사용하여 마이그레이션을 다시 실행할 수 있습니다. 마이그레이션 상태rake db:migrate:status
를 확인하면 두 마이그레이션 모두 up
임을 알 수 있습니다.database: db/development.sqlite3
Status Migration ID Migration Name
--------------------------------------------------
up 20221012152607 Create student table
up 20221013171304 Change grade data type
db/schema.rb
파일을 확인하면 "등급"의 데이터 유형이 문자열에서 정수로 성공적으로 업데이트되었음을 알 수 있습니다.ActiveRecord::Schema.define(version: 2022_10_13_171304) do
create_table "students", force: :cascade do |t|
t.string "name"
t.string "address"
t.integer "phone"
t.string "email"
t.string "school_name"
t.integer "grade"
t.string "teacher_name"
end
end
결론
쉬웠어요. 방금 테이블을 생성하고 몇 단계만으로 열의 데이터 유형을 업데이트했습니다. 활성 레코드 마이그레이션에 사용할 수 있는 더 많은 옵션이 있습니다. 이에 대한 가이드는 여기에서 볼 수 있습니다.
https://guides.rubyonrails.org/active_record_migrations.html
Reference
이 문제에 관하여(Rake가 있는 활성 레코드 테이블), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/addisonfrei/active-record-tables-with-rake-2286텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)