【Rails】radio_buttonを数値として扱いparamsを使って合計点数など計算する

# 環境
- 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)

# 実現したい内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/747746/e578b5ca-28c4-3194-3c10-810d75bd1631.png)

上記の質問内容に対してラジオボタンを押したときに

* はい=>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:「ラジオボタンで書いた値」　
```



```ruby:app/views/sample/test.html.erb
<%= 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で設定した値)、計算する


```ruby:app/controllers/sample_controller.rb
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の追記

```ruby:app/views/sample/test.html.erb
<!-- "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>
```

```ruby:app/controllers/sample_controller.rb
#controllerの追記
class SampleController < ApplicationController
  def test
    @total=params[:total_1].to_i + params[:total_2].to_i
　　　　end
・
・
・
```

# おわりに
初学者で試し試し作っているので、間違っているところがあったらごめんなさい

# 参考
+ [【Rails】createメソッドの使い方とは？new・saveメソッドとの違い](https://pikawaka.com/rails/create)
+ [【Rails】入門説明書 paramsについて解説](https://web-camp.io/magazine/archives/18258)
+ [【Rails】paramsがなんなのかやっとわかった！](https://song-of-life.hatenablog.com/entry/2017/10/30/010819)
+ [【Rails】form_withの使い方を徹底解説！
](https://pikawaka.com/rails/form_with)
+ [【Rails】form_with/form_forについて【入門】
](https://qiita.com/snskOgata/items/44d32a06045e6a52d11c)
+ [【Rails】ラジオボタンを表示する方法](https://nnnamani.com/blog/how-to-use-radio-button-on-rails/)
+ [【Rails】テーブルにデータを保存しよう](https://www.techpit.jp/courses/61/curriculums/65/sections/527/parts/1820)
+ [【Rails】投稿データを保存しよう](https://zenn.dev/masakichi/books/8e19e0b0aeec2d/viewer/2c6b7f)
+ [【JavaScript】ラジオボタンを利用してレコード内集計する
](https://developer.cybozu.io/hc/ja/articles/360000701283-%E3%83%A9%E3%82%B8%E3%82%AA%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E5%86%85%E9%9B%86%E8%A8%88%E3%81%99%E3%82%8B)
+ [【JavaScript】ラジオボタンの診断テストで合計点数に応じてコメントを変える方法](https://haugenic.com/?p=1167)