質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

630閲覧

check_boxメソッドでチェックした数を数えたい

Mo.mi

総合スコア4

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/12/15 07:55

編集2021/12/15 07:58

前提・実現したいこと

お世話になります。
回答の終わった問題にチェックを入れ、全体の何%終えているかを表示する機能を作りたいです。
チェックはform_withのf.check_boxで作り、dbにはチェックを入れると"1"、入れないと"0"で保存されるように作りました。
対象のテーブルが"1"をいくつ持っているかを表示するにはどう記述すればよいでしょうか。
よろしくお願いします。

該当のソースコード

↓questions/new.html.erb

ruby

1<div> 2メソッド問題 3</div> 4<div class="questions"> 5 <%= form_with model: [current_user, @question],local: true do |f|%> 6 7 <div class="volume"> 8 <div class="question"> 9 <div class="method"> 10 <%= link_to "①", "#", target: :_blank, rel: "noopener noreferrer" %> 11 </div> 12 <div class="check"> 13 <%= f.check_box :q1 %> 14 </div> 15 </div> 16 <div class="question"> 17 <div class="method"> 18 <%= link_to "②", "#", target: :_blank, rel: "noopener noreferrer" %> 19 </div> 20 <div class="check"> 21 <%= f.check_box :q2 %> 22 </div> 23 </div> 24 <div class="question"> 25 <div class="method"> 26 <%= link_to "③", "#", target: :_blank, rel: "noopener noreferrer" %> 27 </div> 28 <div class="check"> 29 <%= f.check_box :q3 %> 30 </div> 31 </div> 32 <div class="question"> 33 <div class="method"> 34 <%= link_to "④", "#", target: :_blank, rel: "noopener noreferrer" %> 35 </div> 36 <div class="check"> 37 <%= f.check_box :q4 %> 38 </div> 39 </div> 40 <div class="question"> 41 <div class="method"> 42 <%= link_to "⑤", "#", target: :_blank, rel: "noopener noreferrer" %> 43 </div> 44 <div class="check"> 45 <%= f.check_box :q5 %> 46 </div> 47 </div> 48 </div> 49 <div class="actions"> 50 <%= f.submit "送信する", class: :form__btn %> 51 </div> 52 <% end %> 53</div>

↓users/index.html.erb

ruby

1<main class="main"> 2 <div class="inner"> 3 <% if user_signed_in? %> 4 5 <div class ="menu"> 6 <div class ="item"> 7 <%= link_to "メソッド問題", new_user_question_path(current_user) %> 8 </div> 9 <div class ="method%"> 10 xx%回答済 ←ここに反映させたいです! 11 </div> 12 </div> 13 <% end %> 14 </div> 15 16</main>

ruby

1class QuestionsController < ApplicationController 2 def new 3 @question = Question.find_or_initialize_by(user_id: current_user.id) 4 @answer = Question.where(user_id: current_user.id) 5 @rate = @answer.count("0") 6 end 7 8 def create 9 @question = Question.create!(question_params) 10 redirect_to root_path 11 end 12 13 def edit 14 @question = Question.find(params[:id]) 15 @answer = Question.where(user_id: current_user.id) 16 end 17 18 def update 19 @question = Question.find(params[:id]) 20 @question.update(question_params) 21 redirect_to root_path 22 end 23 24 25 private 26 27 def question_params 28 params.require(:question).permit(:q1, :q2, :q3, :q4, :q5).merge(user_id: current_user.id) 29 end 30 31end

ruby

1class UsersController < ApplicationController 2 def index 3 if user_signed_in? 4 @code = current_user.code 5 @scode = @code.to_s 6 @xlsx = Roo::Excelx.new("test-data.xlsx") 7 @sheet = @xlsx.sheet(@scode) 8 @question = Question.all 9 end 10 end 11end

試したこと

アソシエーションはuser(has_one)、question(belongs_to)になっています。
questionコントローラーに書いた「Question.where(user_id: current_user.id)」をコンソールで確認したところ、テーブルまでは特定できているような気がするのですが、countやlengthを試してみたのですが、"1"の数を取得できずにいます。

また、今はquestionコントローラーで試してますが、実際はusers/index.html.erbに表示したいので、indexアクションにインスタンス変数で対象のテーブルを特定、チェック数の数を記述する必要があると考えているのですが、まだ回答したことがない(questionテーブルがない)ユーザーがログインしてindexページに遷移した時に、questionが存在しないというエラーが出るのではと悩んでます。
実際は数も取得できていないので試せていないのですが、この条件分岐(でしょうか?)もあわせてお教えいただけると非常にありがたいです。

補足情報

ruby 2.6.5p114
rails 6.0.0
mysql Ver 14.14 Distrib 5.6.51

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

下記記述にて、レコードの中身を取得するところまではできました。

ruby

1class UsersController < ApplicationController 2 def index 3 if user_signed_in? 4 @code = current_user.code 5 @scode = @code.to_s 6 @xlsx = Roo::Excelx.new("test-data.xlsx") 7 @sheet = @xlsx.sheet(@scode) 8 end 9 unless current_user.question == nil 10 @user = User.find(current_user.id) 11 @questions = Question.where(user_id: @user.id).pluck(:q1, :q2, :q3, :q4, :q5, :q6) 12 @answers = @questions.count(true)  13 end 14 end 15end

ただし、取得が[[ ]]になってしまい、今度中身を数えるところで詰まっています。(@answersの部分)
ですが、上記質問の主は解決できましたので、こちらの質問は閉じさせていただきます。
お騒がせしました。また、よろしくお願いします。

投稿2021/12/16 03:25

Mo.mi

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問