Rake가 있는 활성 레코드 테이블

ActiveRecord를 사용하여 데이터베이스 테이블을 생성하는 것은 생각보다 쉽습니다. ActiveRecord 마이그레이션은 필요한 SQL을 자동으로 생성하는 Ruby DSL(도메인 특정 언어)을 사용합니다. 각 마이그레이션을 통해 사용자는 데이터베이스의 업데이트된 버전을 생성할 수 있으며 ActiveRecord는 이러한 모든 것을 추적할 수 있습니다. 이 테이블을 시작합시다.

마이그레이션 만들기


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

좋은 웹페이지 즐겨찾기