collection_radio_buttons사용시 디폴트 값을 설정해주지 않으면 아래와 같이 표시된다.
선택없음이 유효하다면 이대로 좋지만 무조건 하나를 선택해야 하는 경우 디폴트 값을 설정해줘야 하는데 매번 까먹으니 이 포스트에 정리해본다.
결론
collection_radio_buttons(오브젝트명, 콜랙션명, 메소드명, 밸류값 [, 옵션])
의 옵션부분에 { checked: 디폴트로 지정하고 싶은 밸류값 }
을 지정해주면 된다.
아래는 실제 코드 예이다.
= f.collection_radio_buttons :attendance_state, Test.attendance_states, :first , :first, { checked: Test.attendance_states.first[0] } do |b|
= b.radio_button(class: "is-checkradio")
= b.label
#app/models/test.rb
ATTENDANCE_STATE0 = 'なし'
ATTENDANCE_STATE1 = 'あり'
enum attendance_state: { "#{ATTENDANCE_STATE0}": 0, "#{ATTENDANCE_STATE1}": 1 }.freeze
주의사항
구현시 주의사항에 대해 정리해본다.
주의사항1. checked안에 밸류값을 넣어주자
StackOverflow에서도 같은 착각을 한 사람이 있었는데 밸류값을 지정하지 않고 object를 넘겨주면 정상작동하지 않는다.
Test.attendance_states.first -> NG
Test.attendance_states.first[0] = ‘なし’ -> OK
주의사항2. 옵션은 4번째 인자에 위치한다.
:attendance_state, Test.attendance_states, :first , :first, {}, { checked: ‘なし’ } -> NG
:attendance_state, Test.attendance_states, :first , :first, { checked: ‘なし’ } -> OK
주의사항3. enum사용시 enum의 밸류값을 적용해주자.
디비값이 0이라고 0을 그대로 넘겨주면 정상동작하지 않는다.
주의사항4. 스키마 정의시 디폴트값 지정해주자
DOM형식을 변경해서 선택을 하지않고 POST했더라도 자동으로 디폴트값이 들어가게 스키마에 디폴트값을 선언해주자(+ null false도)
def change
create_table :test do |t|
t.integer :attendance_state, null: false, default: 0
end
성공적으로 디폴트 설정이 되었다면 아래와 같이 표시됨