Rails enum에 대한 포괄적인 가이드
열거형이란 무엇입니까?
Enum은 각각 다른 값을 갖는 명명된 요소로 구성된 데이터 유형인 enumeration의 약자입니다. 열거자 이름은 일반적으로 언어에서 상수로 작동하는 식별자입니다.
ActiveRecord::Enum
는 Rails 4.1에서 도입되었습니다. 열거형 특성을 선언하면 문자열 및 기호와 같은 값을 데이터베이스의 정수에 매핑할 수 있으며 이름으로 쿼리할 수 있습니다. 이것은 정수의 속도와 효율성, 문자열이나 기호의 유연성을 가지고 있음을 의미합니다.
언제 enum 을 사용할 수 있습니까?
필드의 값이 상수인 경우. Book
모델을 만들고 필드가 genre
이라고 가정해 보겠습니다. 장르 이름을 다음과 같은 정수로 매핑할 수 있습니다. { fantasy: 0, adventure: 1, mystery: 2, romance: 3 }
열거형을 구현하는 방법?
Book
모델 예제를 계속 사용하겠습니다.
1. 도서에 장르 필드를 정수로 추가
class AddGenreToBooks < ActiveRecord::Migration[6.0]
def change
add_column :books, :genre, :integer
end
end
2. 책 모델에 장르 추가
열거형을 선언하는 방법에는 두 가지가 있습니다.
필드의 값이 상수인 경우.
Book
모델을 만들고 필드가 genre
이라고 가정해 보겠습니다. 장르 이름을 다음과 같은 정수로 매핑할 수 있습니다. { fantasy: 0, adventure: 1, mystery: 2, romance: 3 }
열거형을 구현하는 방법?
Book
모델 예제를 계속 사용하겠습니다.
1. 도서에 장르 필드를 정수로 추가
class AddGenreToBooks < ActiveRecord::Migration[6.0]
def change
add_column :books, :genre, :integer
end
end
2. 책 모델에 장르 추가
열거형을 선언하는 방법에는 두 가지가 있습니다.
class AddGenreToBooks < ActiveRecord::Migration[6.0]
def change
add_column :books, :genre, :integer
end
end
# app/models/book.rb
class Book < ActiveRecord::Base
enum genre: [ :fantasy, :adventure, :mystery, :romance ]
end
...또는 더 간단하게
# app/models/book.rb
class Book < ActiveRecord::Base
enum genre: %i(fantasy adventure mystery romance)
end
%i()
(백분율 문자열)의 구문은 내 블로그 게시물을 참조하십시오.# app/models/book.rb
class Book < ActiveRecord::Base
enum genre: { fantasy: 0, adventure: 1, mystery: 2, romance: 3 }
end
값에 특정 숫자를 할당하려는 경우 해시를 사용하는 것이 좋습니다.
어떻게 작동하는지 봅시다.
쿼리 장르
# console
2.6.1 :001 > Book.genres # Check how the genre enum is defined
=> {"fantasy"=>0, "adventure"=>1, "mystery"=>2, "romance"=>3}
2.6.1 :002 > Book.genres[:adventure] # Check the identifier number of "adventure"
=> 1
2.6.1 :003 > Book.genres[:history] # If the genre doesn't exist, it returns nil
=> nil
인스턴스 생성 및 업데이트
# console
2.6.1 :001 > book = Book.create(title: "The Lord of the Rings", genre: 0)
=> #<Book id: 1, title: "The Lord of the Rings", genre: "fantasy", created_at: "2020-12-03 03:27:05", updated_at: "2020-12-03 03:27:05">
2.6.1 :002 > book.genre # Check the genre
=> "fantasy"
# The following doesn't work when you use strings with spaces for enum.
2.6.1 :003 > book.adventure? # Check if the genre is "adventure"
=> false
2.6.1 :004 > book.adventure! # Update the genre
=> true
2.6.1 :005 > book.genre
=> "adventure"
보기의 열거형
열거형의 멋진 점은 컨트롤러와 보기에서 기호나 문자열로 취급할 수 있고 실제로 데이터베이스의 정수인지 걱정할 필요가 없다는 것입니다.
# app/controllers/books_controller.rb
def index
@books = Book.all
end
def new
@book = Book.new
end
# app/views/books/index.html.erb
<% @books.each do |book| %>
<div><%= book.title %></div>
<div><%= book.genre %></div>
<% end %>
# app/views/books/new.html.erb
<%= form_for @book do |f| %>
<%= f.select :genre, Book.genres.keys %>
<%= f.submit %>
<% end %>
ActiveRecord::Enum
는 메모리에 정수이므로 데이터를 저장하는 더 저렴한 방법이지만 알고 있는 모든 ActiveRecord 메서드를 사용할 수 있습니다.
Reference
이 문제에 관하여(Rails enum에 대한 포괄적인 가이드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/junko911/a-comprehensive-guide-to-rails-enum-5a07
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# console
2.6.1 :001 > Book.genres # Check how the genre enum is defined
=> {"fantasy"=>0, "adventure"=>1, "mystery"=>2, "romance"=>3}
2.6.1 :002 > Book.genres[:adventure] # Check the identifier number of "adventure"
=> 1
2.6.1 :003 > Book.genres[:history] # If the genre doesn't exist, it returns nil
=> nil
# console
2.6.1 :001 > book = Book.create(title: "The Lord of the Rings", genre: 0)
=> #<Book id: 1, title: "The Lord of the Rings", genre: "fantasy", created_at: "2020-12-03 03:27:05", updated_at: "2020-12-03 03:27:05">
2.6.1 :002 > book.genre # Check the genre
=> "fantasy"
# The following doesn't work when you use strings with spaces for enum.
2.6.1 :003 > book.adventure? # Check if the genre is "adventure"
=> false
2.6.1 :004 > book.adventure! # Update the genre
=> true
2.6.1 :005 > book.genre
=> "adventure"
# app/controllers/books_controller.rb
def index
@books = Book.all
end
def new
@book = Book.new
end
# app/views/books/index.html.erb
<% @books.each do |book| %>
<div><%= book.title %></div>
<div><%= book.genre %></div>
<% end %>
# app/views/books/new.html.erb
<%= form_for @book do |f| %>
<%= f.select :genre, Book.genres.keys %>
<%= f.submit %>
<% end %>
Reference
이 문제에 관하여(Rails enum에 대한 포괄적인 가이드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/junko911/a-comprehensive-guide-to-rails-enum-5a07텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)