前提・実現したいこと
お世話になります。
回答の終わった問題にチェックを入れ、全体の何%終えているかを表示する機能を作りたいです。
チェックは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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。