📝

Ruby on Railsでラジオボタンを作る

2023/06/10に公開

今日は入力フォームの一種であるラジオボタンについてまとめてみます。

ラジオボタンとは?

2つ以上の選択肢のうち、1つだけを選択するような場合に使われる選択ボタンです。
似たようなものにチェックボックスがありますが、これは複数ある選択肢のうち「なし」または「1つ以上」を選択する場合に使用します。

ラジオボタン実装方法

それでは、名前(name)と性別(sex)を登録する簡単なアプリを作成してラジオボタンを実装していきたいと思います。

Profileモデルを作成、profilesテーブルのカラムを下記のように定義します。

class CreateProfiles < ActiveRecord::Migration[6.0]
  def change
    create_table :profiles do |t|
      t.string :name
      t.string :sex
      t.timestamps
    end
  end
end

それでは、名前をテキストボックスで性別をラジオボタンで選択できるフォームを作成します。
ラジオボタンを作成したい時は、フォームヘルパーのradio_buttonを使います。
下記のように記述します。

<%= form.radio_button :sex, :male %>
<%= form.label :sex_male, "男性" %>

<%= form.radio_button :sex, :female %>
<%= form.label :sex_female, "女性" %>

radio_buttonの1つめのパラメータにカラム名(sex)を、2つめのパラメータに登録したい値(value)を持たせます。
また、labelを付けることでラベルの部分(今回の例だと「男性」「女性」の文字部分)をクリックするとボタンが選択されてユーザーの操作性がUPします。


ビューの表示はこんな感じになります。

また、上記コードのHTML出力は下記のようになります。

<input type="radio" value="male" name="profile[sex]" id="profile_sex_male">
<label for="profile_sex_male">男性</label>
<input type="radio" value="female" name="profile[sex]" id="profile_sex_female">
<label for="profile_sex_female">女性</label>



それでは、名前=由紀子、性別=女性、で登録してみます。
このとき、paramsは下記のように送信されます。

 <ActionController::Parameters {"authenticity_token"=>"EqX8Yx7oudvRScapn+b1cjdIVdHnvuOwZgTk5t9mi40k7//XEafTwhEaMuHt81TKYxE0H18srr/2yyxkhdE2OA==", 
 "profile"=>{"name"=>"由紀子", "sex"=>"female"}, "commit"=>"SEND",  "controller"=>"profiles", "action"=>"create"} permitted: false>

あとはストロングパラメーターで受け取って、保存してあげればOKです。

class ProfilesController < ApplicationController
  def index
  end

  def new
    @profile = Profile.new
  end

  def create
    @profile = Profile.new(profile_params)
    @profile.save
    redirect_to root_path
  end

  private
  def profile_params
    params.require(:profile).permit(:name, :sex)
  end
end

他にも気になるradio_buttonまわりのあれこれ

radio_buttonを調べていて、後で自分でも試してみたいと思った記事を貼って終わりとします。

↓ 性別を文字列じゃなくて数値で保存する方法(と思われる) ↓

https://madogiwa0124.hatenablog.com/entry/2017/12/24/222156

↓ 複数のラジオボタンの生成を1行で書けるみたいです ↓

https://web-begginer-log.com/rails_radio/

追記

ラジオボタンを活用して、性別カラムをenumで保存する方法を試してみました!

Discussion