3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-02-24

環境

  • 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

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

  • はい=>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:「ラジオボタンで書いた値」 
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で設定した値)、計算する

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の追記
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>
app/controllers/sample_controller.rb
#controllerの追記
class SampleController < ApplicationController
  def test
    @total=params[:total_1].to_i + params[:total_2].to_i
    end



おわりに

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

参考

3
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?