수색…


수동으로 모델 만들기

스캐 폴딩을 사용하는 것이 레일스를 처음 사용하거나 새로운 애플리케이션을 만드는 경우 쉽고 빠릅니다. 나중에는 스캐 폴드에서 생성 된 코드를 사용하여 슬림화 할 필요가 없도록 스스로를 수행하는 것이 유용 할 수 있습니다 (사용하지 않은 부품 등을 제거하십시오).

모델 생성은 app/models 아래에 파일을 만드는 것처럼 간단 할 수 있습니다.

가장 간단한 모델은 ActiveRecord 에서 ActiveRecord::Base 를 확장 한 클래스입니다.

class User < ActiveRecord::Base
end

모델 파일은 app/models/ 저장되며 파일 이름은 클래스의 단일 이름에 해당합니다.

# user
app/models/user.rb

# SomeModel
app/models/some_model.rb

이 클래스는 모든 ActiveRecord 기능 (예 : 쿼리 메소드, 유효성 검사, 콜백 등)을 상속합니다.

# Searches the User with ID 1
User.find(1)

참고 : 해당 모델에 대한 테이블이 있는지 확인하십시오. 그렇지 않은 경우 마이그레이션 을 만들어 테이블을 만들 수 있습니다.

모델을 생성 할 수 있으며 다음 명령을 사용하여 터미널별로 마이그레이션 할 수 있습니다.

rails g model column_name1:data_type1, column_name2:data_type2, ...

다음 명령을 사용하여 외래 키 (관계)를 모델에 지정할 수도 있습니다

rails g model column_name:data_type, model_name:references

생성기를 통해 모델 만들기

Ruby on Rails는 ActiveRecord 모델을 생성하는 데 사용할 수있는 model 생성기를 제공합니다. rails generate model 을 사용하고 모델 이름을 제공하기 만하면됩니다.

$ rails g model user

app/models 의 모델 파일 외에도 생성기는 다음을 작성합니다.

  • test/models/user_test.rb
  • test/fixtures/users.yml
  • db/migrate/XXX_create_users.rb 의 데이터베이스 마이그레이션

모델을 생성 할 때 모델의 일부 필드를 생성 할 수도 있습니다.

$ rails g model user email:string sign_in_count:integer birthday:date

이렇게하면 데이터베이스에 적절한 유형의 email, sign_in_count 및 birthday 열이 만들어집니다.

마이그레이션 만들기

기존 테이블의 필드 추가 / 제거

다음을 실행하여 마이그레이션을 만듭니다.

rails generate migration AddTitleToCategories title:string

이렇게하면 categories 테이블에 title 열을 추가하는 마이그레이션이 생성 categories .

class AddTitleToCategories < ActiveRecord::Migration[5.0]
  def change
    add_column :categories, :title, :string
  end
end

마찬가지로, 열을 제거하기 위해 마이그레이션을 생성 할 수 있습니다. rails generate migration RemoveTitleFromCategories title:string

categories 테이블에서 title 열을 제거하는 마이그레이션이 생성 categories .

class RemoveTitleFromCategories < ActiveRecord::Migration[5.0]
  def change
    remove_column :categories, :title, :string
  end
end

엄격하게 말하면 유형을 지정하는 경우 ( :string 이 경우 :string ) 열을 제거하는 데 반드시 필요한 것은 아니며 , 롤백에 필요한 정보를 제공하므로 유용 합니다.

표 만들기

다음을 실행하여 마이그레이션을 만듭니다.

rails g CreateUsers name bio

레일즈는 Create 접두어로 테이블을 생성하려는 의도를 인식하고 나머지 이주 이름은 테이블 이름으로 사용됩니다. 주어진 예제는 다음을 생성합니다 :

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.string :bio
    end
  end
end

creation 명령이 열 유형을 지정하지 않았으며 기본 string 이 사용되었습니다.

조인 테이블 만들기

다음을 실행하여 마이그레이션을 만듭니다.

rails g CreateJoinTableParticipation user:references group:references

Rails는 이주 이름으로 JoinTable 을 찾아 조인 테이블을 작성하려는 의도를 감지합니다. 그 밖의 모든 것은 그 이름 뒤에있는 들판의 이름에서 결정됩니다.

class CreateJoinTableParticipation < ActiveRecord::Migration
  def change
    create_join_table :users, :groups do |t|
      # t.index [:user_id, :group_id]
      # t.index [:group_id, :user_id]
    end
  end
end

필요한 index 명령문의 주석 처리를 제거하고 나머지는 삭제하십시오.

상위

예제 마이그레이션 이름 인 CreateJoinTableParticipation 은 테이블 작성 규칙과 일치합니다. Create 접두사가 있습니다. 하지만 간단한 create_table 생성하지는 못했습니다. 이는 이주 생성자 ( 소스 코드 )가 다음 목록 중 첫 번째 일치 항목 을 사용하기 때문입니다.

  • (Add|Remove)<ignored>(To|From)<table_name>

  • <ignored>JoinTable<ignored>

  • Create<table_name>

콜백 소개

콜백은 개체 라이프 사이클의 특정 시점 (데이터베이스에서 생성, 삭제, 업데이트, 유효성 검사, 저장 또는로드 직전 또는 이후)에 호출되는 메서드입니다.

예를 들어, 생성 후 30 일 이내에 만료되는 목록이 있다고 가정 해보십시오.

이를 수행하는 한 가지 방법은 다음과 같습니다.

class Listing < ApplicationRecord
  after_create :set_expiry_date

  private

  def set_expiry_date
    expiry_date = Date.today + 30.days
    self.update_column(:expires_on, expiry_date)
  end
end

콜백에 사용할 수있는 모든 메소드는 각 객체의 조작 중 호출되는 순서와 동일한 순서로 다음과 같습니다.

객체 만들기

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_create
  • around_create
  • after_create
  • after_save
  • after_commit / after_rollback

객체 업데이트

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_update
  • around_update
  • after_update
  • after_save
  • after_commit / after_rollback

객체 삭제하기

  • before_destroy
  • around_destroy
  • after_destroy
  • after_commit / after_rollback

참고 : after_save는 작성 및 업데이트시에 실행되지만 항상 매크로 호출이 실행 된 순서에 상관없이보다 구체적인 콜백 after_create 및 after_update 이후에 실행됩니다.

마이그레이션을 사용하여 조인 테이블 만들기

has_and_belongs_to_many 관계에 특히 유용합니다. create_table 메소드를 사용하여 조인 테이블을 수동으로 생성 할 수 있습니다. 두 개의 모델 TagsProyects 가 있고 has_and_belongs_to_many 관계를 사용하여 연관 Proyects 한다고 가정 해보십시오. 두 클래스의 인스턴스를 연결하려면 조인 테이블이 필요합니다.

class CreateProjectsTagsJoinTableMigration < ActiveRecord::Migration
  def change
    create_table :projects_tags, id: false do |t|
      t.integer :project_id
      t.integer :tag_id
    end
  end
end

테이블의 실제 이름은이 규칙을 따라야합니다. 알파벳순으로 다른 모델보다 먼저 나오는 모델이 먼저 나와야합니다. P roject가 T ags에 선행하므로 테이블의 이름은 projects_tags입니다.

또한이 표의 목적은 두 모델의 인스턴스 간 연관을 라우트하는 것이므로이 표의 모든 레코드의 실제 ID는 필요하지 않습니다. id: false 를 전달하여 지정합니다 id: false

마지막으로, Rails의 관습과 같이 테이블 이름은 개별 모델의 복합 복수 형식이어야하지만 테이블의 열은 단일 형식이어야합니다.

모델 수동 테스트

명령 행 인터페이스를 통해 Active Record 모델을 테스트하는 것은 간단합니다. 터미널의 app 디렉토리를 탐색하고 rails console 을 입력하여 Rails 콘솔을 시작합니다. 여기에서 데이터베이스에 활성 레코드 메소드를 실행할 수 있습니다.

예를 들어, name:string 열과 email:string 갖는 Users 테이블이있는 데이터베이스 스키마가있는 경우 다음을 실행할 수 있습니다.

User.create name: "John", email: "[email protected]"

그런 다음 그 기록을 보여주기 위해 다음을 실행할 수 있습니다 :

User.find_by email: "[email protected]"

또는 이것이 첫 번째 또는 유일한 레코드 인 경우 다음을 실행하여 첫 번째 레코드를 얻을 수 있습니다.

User.first

모델 인스턴스를 사용하여 행 업데이트

User 모델이 있다고 가정 해 보겠습니다.

class User < ActiveRecord::Base
end

이제 id = 1 인 사용자의 first_namelast_name 을 업데이트하려면 다음 코드를 작성하면됩니다.

user = User.find(1)
user.update(first_name: 'Kashif', last_name: 'Liaqat')

update 를 호출하면 (자), 단일의 트랜잭션 (transaction)로 지정된 속성을 갱신하려고합니다. 성공했을 경우는 true , 실패했을 경우는 false 돌려줍니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow