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 |