Methods in Rails modules

2022. 2. 6. 21:05· Backend/RubyOnRails
728x90

Methods in Rails modules

해당 글은 Methods in Rails modules 을 번역한 글입니다.

모듈은 일반적으로 속성 값을 보유할수 있도록 상수를 그룹화 하는 데 사용합니다. 아래 예제에서 Order 클래스와 status 속성이 있다고 해봅시다.

Status는 pending(보류), confirmed(확인), cacelled(취소) 등을 가지고 있습니다.

classOrder < ApplicationRecord

  module Status
    PENDING='Pending'
    CONFIRMED='Confirmed'
    CANCELLED='Cancelled'
    DECLINED='Declined'
    COMPLETED='Completed'
  end

  validates_inclusion_of :status, in: [Status::PENDING,Status::CONFIRMED,Status::CANCELLED,Status::DECLINED,Status::COMPLETED]

end

새로운 Order가 생기거나, Order가 업데이트 되면, Status 속성에 유효한 값이 포함되도록 해야 합니다. 이를 위해 Rails의 validation method인 validates_inclusion_of를 사용하고 있습니다. 새로운 Status를 추가하면, 유효성 검사도 변경해야 합니다.

위와 같은 상황을 피하기 위해 Status라는 모듈에 all이라는 메소드를 추가합니다.

classOrder < ApplicationRecord

  module Status
    PENDING='Pending'
    CONFIRMED='Confirmed'
    CANCELLED='Cancelled'
    DECLINED='Declined'
    COMPLETED='Completed'

    def self.all
      constants.map { |const| const_get(const) }
    end
  end

  validates_inclusion_of :status, in: Status.all

end

다른 곳에서 사용할 메서드를 더 추가할 수도 있습니다.

classOrder < ApplicationRecord

  module Status
    PENDING='Pending'
    CONFIRMED='Confirmed'
    CANCELLED='Cancelled'
    DECLINED='Declined'
    COMPLETED='Completed'

    def self.all
      constants.map { |const| const_get(const) }
    end

    def self.active
      [Status::PENDING, Status::CONFIRMED]
    end
  end

  validates_inclusion_of :status, in: Status.all

  def active?
    status.in?(Status.active)
  end
end

이러한 최소한의 코드로 실수를 피하기를 바래봅니다.

728x90
728x90
저작자표시 비영리 (새창열림)

'Backend > RubyOnRails' 카테고리의 다른 글

NamedRoute의 _path vs _url  (0) 2022.08.15
devise_invitable를 테스트 해보자.  (0) 2022.02.19
How Rails Sessions Work(어떻게 레일즈 세션은 동작하는가)  (0) 2021.12.24
[RubyOnRails Guides] Active Record Query Interface - 2편  (0) 2021.03.09
[RubyOnRails Guides] Active Record Query Interface - 1편  (0) 2021.03.09
'Backend/RubyOnRails' 카테고리의 다른 글
  • NamedRoute의 _path vs _url
  • devise_invitable를 테스트 해보자.
  • How Rails Sessions Work(어떻게 레일즈 세션은 동작하는가)
  • [RubyOnRails Guides] Active Record Query Interface - 2편
Seyun(Marco)
Seyun(Marco)
개발, PO, PM, 기획과 관련된 서비스 관련 업무에 관심이 있습니다. 또한 성장,교육과 관련된 주제에 대해서도 관심이 많습니다. 티타임을 좋아하는 사람으로써, 혹시 티타임에 관심이 있으신 분은 ksy90101@gmail.com로 메일 보내주시면 감사하겠습니다 :) 과제를 제공해주고 피드백을 주는 서비스를 오픈하였습니다. 관심있으신 분들은 https://jobskill.notion.site/ 해당 사이트를 참고해주세요.
250x250
Seyun(Marco)
Enthusiastically, Steady, Slowly
Seyun(Marco)
전체
오늘
어제
  • 분류 전체보기 (258)
    • Common (31)
      • ComputerScience (10)
      • Web (9)
      • Git (1)
      • 세미나 (8)
      • Testing (3)
    • Backend (129)
      • Java (35)
      • Kotlin (3)
      • Spring (26)
      • Ruby (11)
      • RubyOnRails (17)
      • Python (1)
      • Django (3)
      • Infra (3)
      • DataBase (9)
      • SQL (21)
    • Frontend (30)
      • HTML&CSS (1)
      • JavaScript (16)
      • TypeScript (1)
      • Vue (5)
      • Nuxt.js (3)
      • React (4)
    • Book (30)
      • 이펙티브 자바 3판 (9)
    • Lecture (26)
      • [인프런] Vue.js 시작하기 - Age of .. (14)
      • [Tacademy] JPA 프로그래밍 기본기 다지.. (8)
    • 회고 (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • RESTful
  • SCSS
  • locale
  • Nuxt3
  • JUnit
  • rubyonrails
  • 개발문화
  • ruby
  • IBM Plex Sans
  • JavaScriprt
  • system.out.println
  • 멱등성
  • scanner
  • REST API
  • 우아콘
  • java
  • MVC
  • JAR index
  • System.out.printlin
  • Finalization

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Seyun(Marco)
Methods in Rails modules
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.