現在クイズ系のアプリを制作しています。
そこで、このような流れで考えています。
・クイズの問題や答えをDBに保存する
・DB情報をビューに取得する。ただし答えはテキストエリアにする
・入力したテキストエリアの答えとDB内の答えの情報を照合する
・答えが一致した場合と不一致した場合のフラッシュメッセージを出す
大雑把ですが、このように出来ればと思っています。
自分でも調べましたが、「入力したテキストエリアの答えとDB内の答えの情報を照合する」と言う部分がどうしてもヒットしません。
そもそもビュー内のテキストエリアにテキストを入力してDB内の情報と照合できるのかが分からないのでご教示して頂きたいです。
初めてアプリを制作いているので、行き詰まっています。
もし、他のやり方で似たような事ができるのであれば、そちらの方もご教示して頂けたら幸いです。
どうかお力を貸してください。
補足データ
rails 6.14
ruby 3.0.2
macOS 11.6
追記コード
ruby.controller def update @question = Problem.find(params[:id]) if @question.answer == params[:problem][:answer] flash[:notice] = "大正解" else flash[:notice] = "はずれ" end render :show end
ruby.show.html <% provide(:title, "問題出題") %> <div class="container"> <div class="row"> <%= form_with model: @question, url: {contller: 'question', action: 'update'} do |f| %> <h1>問題</h1> <ul class="problems"> <%= @problems.html_safe %> </ul> <div class="ans"> <h2>答え</h2> < %= f.text_field :answer%> </div> <%= f.submit "回答", class: "btn btn-primary" %> <% end %> </div> </div>
routes get '/question', to: 'question#show' patch '/question', to: 'question#update'
ログ
question GET /question(.:format) question#show
PATCH /question(.:format) question#update
再追記コード
ruby.controller def show @problems = Problem.offset( rand(Problem.count)).limit(1).pluck(:study_type, :explanation_text, :problem_text).join("<br>") end
変更したコード
rubycontroller
1 2class QuestionController < ApplicationController 3 before_action :logged_in_user 4 5 def show 6 @question = Problem.find_by(params[:id])⇦追加しました 7 @problems = Problem.offset(rand(Problem.count)).limit(1).pluck(:study_type, :explanation_text, :problem_text).first ⇦ここが変わっています 8 end 9 10 def update ↓ここが変わっています 11 @question = Problem.find_by(params[:id]) 12 13 if @question.answer == params[:problem][:answer] 14 flash[:notice] = "大正解" 15 else 16 flash[:notice] = "はずれ" 17 end 18 19 render :show 20 end 21end
rubyview
1<% provide(:title, "問題出題") %> 2<div class="container"> 3 <div class="row"> 4 <%= form_with model: @question, url: {contller: 'question', action: 'update'} do |f| %> 5 <h1>問題</h1> 6 <ul class="problems"> 7ここが変わっています⇨ 教科:<%= raw(@problems.map{|i| h(i)}.join("<br><br>")) %> </ul> 8 <div class="ans"> 9 <h2>答え</h2> 10 <%= f.text_field :answer%> 11 </div> 12 <%= f.submit "回答", class: "btn btn-primary" %> 13 <% end %> 14 </div> 15</div> 16
追記コード3
problemscontroller
1class ProblemsController < ApplicationController 2 before_action :logged_in_user 3 before_action :correct_user, only: %i[edit update] 4 5 def show 6 @problem = Problem.find(params[:id]) 7 end 8 9 def new 10 @problem = Problem.new 11 end 12 13 def create 14 @problem = current_user.problems.build(problem_params) 15 @problem.picture.attach(params[:problem][:picture]) 16 if @problem.save 17 flash[:success] = '問題が作成されました!' 18 redirect_to problem_path(@problem) 19 else 20 render 'problems/new' 21 end 22 end 23 24 def edit 25 @problem = Problem.find(params[:id]) 26 end 27 28 def update 29 @problem = Problem.find(params[:id]) 30 if @problem.update(problem_params) 31 flash[:succcess] = '問題情報が更新されました!' 32 redirect_to @problem 33 else 34 render 'edit' 35 end 36 end 37 38 def destroy 39 @problem = Problem.find(params[:id]) 40 if current_user.admin? || current_user?(@problem.user) 41 @problem.destroy 42 flash[:success] = '問題が削除されました' 43 redirect_to request.referer == user_url(@problem.user) ? user_url(@problem.user) : root_url 44 else 45 flash[:danger] = '別アカウントの問題は削除できません' 46 redirect_to root_url 47 end 48 49 def rand 50 @problem = Problem.order("RAND()").take 51 end 52 end 53 54 private 55 56 def problem_params 57 params.require(:problem).permit(:study_type, :title, :explanation_text, :problem_text, :answer, :problem_explanation, :taget_age, :reference, :picture) 58 end 59 60 def correct_user 61 # 現在のユーザーが更新対象の問題を保有しているかどうか確認 62 @problem = current_user.problems.find_by(id: params[:id]) 63 redirect_to root_url if @problem.nil? 64 end 65end
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/20 09:55
2021/11/28 06:50
2021/11/28 07:01
2021/11/28 10:28
2021/11/28 11:16
2021/11/28 11:37
2021/11/28 11:53
2021/11/28 12:27
2021/11/28 12:39
2021/11/28 13:42
2021/11/28 22:03
2021/11/28 22:05
2021/11/28 22:12
2021/11/29 02:10
2021/11/29 03:26
2021/11/29 03:33
2021/11/29 05:30 編集
2021/11/29 07:23
2021/11/30 09:51
2021/11/30 09:57
2021/11/30 10:06
2021/11/30 10:10
2021/12/01 09:42 編集
2021/12/01 09:44
2021/12/01 09:53
2021/12/01 09:57
2021/12/01 10:15
2021/12/01 10:20
2021/12/01 10:24
2021/12/02 09:55 編集
2021/12/02 10:06
2021/12/02 10:15 編集
2021/12/03 10:10
2021/12/03 10:16
2021/12/04 20:59
2021/12/04 21:04
2021/12/04 21:38
2021/12/05 00:09
2021/12/05 01:42
2021/12/05 01:57
2021/12/05 02:12
2021/12/05 02:33
2021/12/05 02:39
2021/12/05 02:41
2021/12/05 06:41
2021/12/05 08:40
2021/12/05 09:34
2021/12/05 10:21
2021/12/05 11:26
2021/12/05 11:36
2021/12/05 11:42
2021/12/05 11:48
2021/12/05 12:01
2021/12/05 12:01
2021/12/05 12:13
2021/12/05 12:21
2021/12/05 12:27
2021/12/05 12:56 編集
2021/12/08 01:58 編集