ユーザーの性別を表示する方法を考えたので記録を残します。
###カラムのデータ型をinteger、boolearn型にした場合
enumを利用するのが良いかなと思います。
###カラムのデータ型をstring型にした場合(私はこれにしました)
Form
<%= markup do |m|
p = FamilyFormPresenter.new(form, self)
m << p.gender_field_block
end %>
htmlビルダーとプレゼンターを利用してフォームに組み込んでいます。
[htmlビルダーについて]
(https://www.oiax.jp/rails/tips/nokogiri_html_builder.html)
[プレゼンターについて]
(https://www.oiax.jp/rails/tips/decorators_and_presenters.html)
Presenter
def gender_field_block
markup(:div, class: "radio-buttons") do |m|
m << decorated_label(:gender, "性別")
m << radio_button(:gender, "male")
m << label(:gender_male, "男性")
m << radio_button(:gender, "female")
m << label(:gender_female, "女性")
end
end
以下のhtmlが生成されます。
<label>男性</label>
<input type="radio" value="male" name="family[gender]" id="family_gender_male">
<label>女性</label>
<input type="radio" value="female" name="family[gender]" id="family_gender_female">
ラジオボタンで男性を選択した場合、"male"、女性を選択した場合に"female"が保存されます。
ヘルパーに男性か女性を返すメソッドを作成します
/application.helper
#男性か女性を返す
def judge_gender(gender)
case gender
when "male"
"男性"
when "female"
"女性"
else
""
end
end
/view
<%= judge_gender(@family.gender)%>
引数に性別属性を渡しています。