環境
- Mac(12.2.1)
- MacBook Pro (13-inch, 2020)
- 2 GHz クアッドコアIntel Core i5
- 16 GB 3733 MHz LPDDR4X
- ruby (3.0.0p0)
- rails (7.0.1)
- mysql2 (0.5.3)
実現したい内容
上記の質問内容に対してラジオボタンを押したときに
- はい=>2点
- いいえ=>0点
- どちらでもない=>1点
と、それぞれのラジオボタンを点数として取り扱う
更に、それらの点数を合計し、結果をDBに保存する
主に使用したメソッド
・ [form_with]
・ [radio_button]
・ [label]
・ [submit]
・ [params]
viewには何を書く?
viewではform_withを使用し、フォームを作成する
form_withのネスト(入れ子)に「radio_button」、「label」を使用
⇨「はい」、「いいえ」、「どちらでもないの」など、フォームに表示したい内容とそれらの値(今回は点数)を記述
「submit」を使用し、DBに保存
controllerには何を書く?
controllerではviewの入力情報を受け取り、その入力情報をもとに計算を行う
受け取りは「params」を使用
view名(今回はapp/views/sample/test.html.erb)と同名のアクション(今回はtestアクション)を作成し、そのアクション内でparamsで受け取った情報を受け取り、合計計算とDBへの保存を行う
とある質問フォームを作った時の例
Sampleテーブル
id | result |
---|---|
1 | 4 |
2 | 2 |
viewの設定
ラジオボタンの記述方法
f.radio_button :「オブジェクト名(保存したいカラム名など)」,:「ここに点数(数値)を設定」
ラベルの記述方法
f.label :「ラジオボタンで書いたオブジェクト名(保存したいカラム名など) 」, "「画面上で表示したいタイトル」",value:「ラジオボタンで書いた値」
<%= form_with modele: @test,url: test_path, local: true,method: :post do |f| %>
<li>ここに質問の文言を記述</li>
#設問1つ目
<%= f.radio_button :total_1 , 2, checked: true %>
<%= f.label :total_1 ,"はい",value: 2 %>
<%= f.radio_button :total_1 ,0 %>
<%= f.label :total_1 ,"いいえ",value: 0 %>
<%= f.radio_button :total_1 ,1%>
<%= f.label :total_1 ,"どちらでもない",value: 1 %>
#設問2つ目
<%= f.radio_button :total_2 , 2, checked: true%>
<%= f.label :total_2 ,"はい",value: 2%>
<%= f.radio_button :total_2 ,0%>
<%= f.label :total_2 ,"いいえ",value: 0%>
<%= f.radio_button :total_2 ,1%>
<%= f.label :total_2 ,"どちらでもない",value: 1%>
<%= f.submit%>
controllerの設定
controller側でラジオボタンの入力情報をparamsで受け取り(今回の場合はradio_buttonのvalueで設定した値)、計算する
class SampleController < ApplicationController
def create
@total=params[:total_1].to_i + params[:total_2].to_i
@total_result = Sample.create(result: @total)
end
・
・
・
web画面上でsubmit(送信ボタン)を押すと、form_withのmethod: :postでcontrollerのcreateアクションが実行
結果
- @tatalでフォーム内容をparamsで計算
- @total_lesultでSampleテーブルのresultカラムに@totalの内容を保存
おまけ:web画面に結果を出したい場合
web画面に結果を出したい場合、
- viewの追記
- viewのform_withのmethod: :postをmethod: :getに変更
- controllerの追記
<!-- "viewのform_withのmethod: :postをmethod: :getに変更"-->
<%=form_with modele: @test,url: test_path, local: true,method: :get do |f|%>
・
・
・
<!--viewの追記-->
<li><%= p @toatl %></li>
#controllerの追記
class SampleController < ApplicationController
def test
@total=params[:total_1].to_i + params[:total_2].to_i
end
・
・
・
おわりに
初学者で試し試し作っているので、間違っているところがあったらごめんなさい