Skip to content

Archives

  • 2022년 3월
  • 2022년 2월
  • 2022년 1월
  • 2021년 12월
  • 2021년 11월

Categories

  • 카테고리 없음
Calor Blogfever risk

단어와 코드

admin - 1월 14, 2022

얼간이 경고:나는 데이터베이스를 좋아합니다. 세상에,그들은 단지 환상적입니다. 몇 가지 빈 화이트 보드와 밖으로 스케치 할 필요가 복잡한 조인 테이블의 몇 나에게 많은 기쁨을 제공합니다. 당신이 그것의 똥 톤이 특히–그러나 데이터를 처리하는 방법을 이해하는 예술도 있습니다.

사람들이 데이터로 겪는 주요 문제는 첫째,데이터를 저장하는 방법,둘째,실제로 필요할 때 데이터를 얻는 방법입니다! 이 오른쪽,하지만 슈퍼 복잡한 소리를하지 않는 이유는 무엇입니까? 잘못된. 데이터베이스는 수평이 아닌 수직으로 성장하며 빠르게 성장합니다. 특정 시점에서,당신이 당신의 데이터를 저장하는 방법에 대한 이동 방법은 직접 당신이 그것을 검색에 대해 이동하는 방법에 영향을 끝!

많은 루비 주의자들은 다른 도우미 메소드를 작성하여 쿼리를 수행합니다. 그러나 이것은 우리가 우리의 처분에 검은 레일 마법을 가지고 있다는 것을 의미 레일 랜드입니다. 그리고 레일 4.1 의 출현과 함께,그 마법은 이제 이름 인 열거 형을 가지고 있습니다.

  • 레일 4 일 때
  • 여러 열?! 아무도 그 시간이 없어!
  • 작은 마음을 쿼리
  • 팁과 트릭

레일 4 일 때

에서 열거 형을 가져옵니다.1 년 미만 전에 출시 된,그것은 새로운 기능의 무리와 함께 나왔다. 그 중 하나는 활동적이었습니다.코드 열거 형은 본질적으로 많은 방법과 불필요한 코드를 잘라 냈습니다.

액티비어코드 열거형을 사용하면 속성 값이 문자열이 아닌 데이터베이스의 정수에 매핑되도록 레일에서 액티비어코드 개체의 특성을 조작할 수 있지만 이름으로 쿼리할 수도 있습니다. 이 모든 것이 당신에게 미친 것처럼 들린다면,그것은 그렇습니다! 열거 형은 문자열의 유연성이 있지만 정수의 속도와 효율성을 가지고 있기 때문에 매우 멋집니다. 정수를 사용하여 거대한 데이터베이스의 값을 조회 할 수 있지만 속성을 문자열로 업데이트하고 추가 할 수도 있습니다. 오-당신은 또한 무료로 방법의 무리를 얻을!

이 마법은 정확히 어떻게 작동합니까? 나는 당신이 결코 묻지 않을 것이라고 생각했다!

여러 열?! 아무도 그 시간이 없어!

액티비어코드 열거형을 구현하는 방법을 보여주기 위해 지난 주 전자상거래 서점 앱을 예로 들어 보겠습니다. 그래서,나는이Book객체를 내 가게에 가지고 있으며,그 상태가 무엇인지 추적하고 싶습니다:in stock,out of stock또는ordered. 단순성을 위해,우리는 내가 매우 정교한 서점이 아니라는 것을 가장 할 것이므로Book이 많지 않으므로 각Book객체는이 세 가지 상태 중 하나만 가질 수 있습니다.

먼저 각 상태를 나타내는 세 개의 다른 열을 가짐으로써 시작할 수 있습니다:

1234567
class AddStatusesToBooks < ActiveRecord::Migration def change add_column :books, :in_stock?, :boolean add_column :books, :out_of_stock?, :boolean add_column :books, :ordered?, :boolean endend

그러나 이것은 일종의… 나는 항상 두 개의 빈 열을 가질 것입니다. 이 코드는 나를 모두 좋아합니다:

또는 이러한 모든 열을 하나로 결합하여 부울 값을 반환하는 도우미 메서드를 사용할 수 있습니다.Book:

12345678910111213
class Book < ActiveRecord::Base def in_stock? self.status == 'in stock' end def out_of_stock? self.status == 'out of stock' end def ordered? self.status == 'ordered' endend

자,이제 하나의 열이 있으므로 더 좋습니다. 그러나 이것은 여전히 반복적이고 추악하며 비효율적입니다. 걱정하지 마세요,그것은 진짜 좋은 얻을하려고합니다.

작은 마음을 쿼리

열거 형을 구현하는 것은 매우 간단합니다. 먼저 매크로를 클래스에 추가합니다:

123
class Book < ActiveRecord::Base enum status: end

내status속성이 세 가지 다른 옵션으로 분류되어 있음을 알 수 있습니다. 배열에서 기호처럼 보인다는 사실은 실수가 아닙니다. 따라서in_stock는 인덱스 번호0,out_of_stock은1,ordered은2으로 참조됩니다.

다음으로 마이그레이션에 액티버코드 열거형에서 쿼리를 수행할 수 있는 열을 추가합니다:

12345
class AddStatusToBooks < ActiveRecord::Migration def change add_column :books, :status, :integer, default: 0 endend

내 모든Book개체를 만들 때in_stock상태로 기본값으로 지정하여 열에default: 0를 추가했습니다. 기본값을 추가하는 것은 항상 코드를 방어적으로 유지하는 좋은 방법입니다.

이제Book개체를 만들고 상태를 확인하려면:

1234567891011121314151617
book = Book.createbook.status# => "in_stock"book.out_of_stock?# => falsebook.status = :orderedbook.ordered! #updates the objectbook.ordered?# => truebook.status?# => "ordered"book.out_of_stock# => #<ActiveRecord::Relation >

가서 당신이 나를 믿지 않는 경우 스크롤-나는 이러한 방법 중 하나를하지 않았다 약속! 열거 형은 나에게 준,에 대한 무료. 그래서 실제로 여기서 무슨 일이 일어나고 있습니까? 음,열거형 매크로 배열에 제공된 기호의 인덱스에 해당하는 정수를 액티 리코 드 매핑하는 것 이상은 아닙니다.

데이터베이스에는 이 모든 정보를 저장하는 열이 하나만 있습니다.status. 이 열에는 모두1,2또는3인 행이 있습니다. 이러한 배열 인덱스에 해당하는 실제 기호를 가져와 반환하며 동시에in_stock,out_of_stock및ordered범위를 만듭니다. 그리고 케이크에 착빙: 즉시 과정에서 우리를 위해 생성되는 모든 도우미 방법!

팁과 트릭

열거 형은 많은 유연성을 제공합니다. 예를 들어,내Book개체의in_stock범위를 사용하여 인벤토리에 추가된 상위 3 개의 최신 책을 정렬하는 특정 클래스 메서드를 만들었습니다:

1
scope :newest_stock, -> (limit: 3) { in_stock.order('date DESC').limit(limit) }

기억해야 할 또 다른 점은 동일한 클래스의 다른 열거 형에 동일한 이름을 사용할 수 없다는 것입니다:

1234
class Book < ActiveRecord::Base enum status: enum inventory: end

확실히 이것을하지 마십시오-이것은 능동적 인 오류를 일으킬 것입니다!

열거형 사용의 큰 장점은 응용 프로그램의 속도와 성능에 기여한다는 것입니다. 데이터를 문자열 값이 아닌 메모리에 정수로 저장하는 것이 훨씬 저렴하다는 것은 잘 알려진 사실입니다. 열거 형은 그 이점을 활용하지만,당신이 알고 사랑하는 모든 활동 기록 방법을 사용할 수 있습니다.

따라서 정보를 저장하고 액세스하는 데 필요한 속도와 성능을 희생하지 않고도 사람이 읽을 수 있고 재미있는 프로그램 코드를 가질 수 있습니다. 꿈은 진짜로 진실한 온다 것 을 나는 짐작한다.

답글 남기기 응답 취소

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

최신 글

  • 회사 소개-간돌포 헬린&분수 문학 관리
  • 에 대해 알아야 할 5 가지 샬란 플래너
  • 롤링 스톤
  • 피부 독성
  • 세르게이 체레프닌-아르타디아
  • 사회적 스트레스와 압력에 대처하는 방법
  • 어떤 말 품종이 가장 똑똑합니까?
  • 우리의 현명함을 설명 8 부–자기 스마트
  • 화이트 플레인 사회 보장 사무실
  • 예고없는 회사 다루기

보관함

  • 2022년 3월
  • 2022년 2월
  • 2022년 1월
  • 2021년 12월
  • 2021년 11월

메타

  • 로그인
  • 엔트리 피드
  • 댓글 피드
  • WordPress.org
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어

Copyright Calor Blog 2022 | Theme by ThemeinProgress | Proudly powered by WordPress