rails6 collection_radio_buttons에서 enum값을 사용하는 방법

Posted by negabaro kim on Sunday, September 20, 2020 Tags: rails/view   2 minute read

개요

이 포스트에서는 collection_radio_buttons에서 enum값을 사용하는 방법에 대해 알아보자.

enum_help도 사용할것이므로 enum_help를 인스톨 해두자(설정 방법은 아래 포스트를 참고)

Rails enum_help gem을 이용해 enum 설정에 다국어 기능을 대응하는 방법

collection_radio_buttons 문법

collection_radio_buttons메소드의 문법은 아래와 같다.

collection_radio_buttons(오브젝트명, 콜랙션명, 메소드명, 밸류값 [, 옵션])

이때까지 콜랙션명은 ActiveRecord를 이용한 결과(CollectionProxy)여야 한다고 오해하고 있었는데 enum으로 가져올 수 있었다.

메소드명과 벨류값에는 :first, :last를 넣어주면 enum의 키값을 text에 벨류값을 그대로 value에 지정해준다. (엄청 편리)

실제 사용예제

뷰 로직

= f.label :item_type, class: 'label is-small'
= f.collection_radio_buttons :item_type, Item.item_types_i18n, :first , :last do |b|
  = b.radio_button(class: "is-checkradio is-rtl")
  = b.label 

모델에 정의한 enum로직

#app/models/item.rb
enum item_type: {
  'type0': 0,
  'type1': 1,
},  _prefix: true

locale설정

Rails enum_help gem을 이용해 enum 설정에 다국어 기능을 대응하는 방법 에서 소개한 enum_help에 의해 enum의 키값에 해당하는 값을 config/locales/xx.yml에 지정해주면 I18n에 의해 국가별 언어를 가지고 온다.

en:
  enums:
    item:
      item_type:
        type0: public
        type1: private
ja:
  enums:
    item:
      item_type:
        type0: 公開
        type1: 非公開
kr:
  enums:
    item:
      item_type:
        type0: 공개
        type1: 비공개

reference:

Link Link2 도큐멘트

공식도큐멘트? 예제풍부