📝
Ruby on Railsでラジオボタンを作る
今日は入力フォームの一種であるラジオボタンについてまとめてみます。
ラジオボタンとは?
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を調べていて、後で自分でも試してみたいと思った記事を貼って終わりとします。
↓ 性別を文字列じゃなくて数値で保存する方法(と思われる) ↓
↓ 複数のラジオボタンの生成を1行で書けるみたいです ↓
Discussion