在列出的第一个答案的评论中得到了答案,它一直在验证,我只需要将Flash添加到视图中。
如何更改此代码以验证答案是否正确?
我遵循了本教程http://quizzsystem.comyr.com/web-page/
它应该做的是对答案运行检查(/quizzs_controller.rb)以验证它是否正确
/quizzs_controller.rb
class QuizzsController < ApplicationController
before_action :set_quizz, only: [:show, :edit, :update, :destroy]
before_filter :authenticate, :except=>[:home, :answering, :answer, :check]
...
def check
@quizz = Quizz.find(params[:id])
respond_to do |format|
if params[:ans][0].to_i==@quizz.correctAns
flash[:notice] = "<b>Congratulation. You gave the correct answer to the question: " + @quizz.question + "</b>"
format.html { redirect_to({:controller => "quizzs", :action => "answering",:id=>"1" } ) }
format.xml { head :ok }
else
flash[:notice] = "<b p style='color: red'>I am sorry but that is not the right answer to the question: " + @quizz.question + "</b>"
format.html { redirect_to({:controller => "quizzs", :action => "answering",:id=>"1" } ) }
format.xml { head :ok }
end
end
end
...
因此,当您点击下方视图中的按钮时,会运行“检查”以验证答案,在重定向到/answering.html.erb的页面上显示相应的消息。
/answer.html.erb
*我在form_tag之前添加了“=”符号,这是原始代码的唯一更改(除非有错字我还没有抓到)
...
<%= form_tag( :action => "check",:id => @quizz.id) do %>
<p>
<b>The correct answer is number: </b>
<%= text_field :ans,params[:ans]%>
</p>
<p><%= submit_tag("check")%></P>
<%end%>
<%= link_to 'Back', {:controller => "quizzs", :action => "answering",:id=>"1" } %>
...
回溯到此页面并显示消息
/answering.html.erb
<h2>Which question do you want to answer</h2>
<table>
<tr>
<th>Question</th>
</tr>
<%@quizzs.each do |quizz|%>
<tr>
<td><%=h quizz.question %></td>
<td><%= link_to '<> Answer this', :controller => "quizzs", :action => "answer", :id =>quizz.id%></td>
</tr>
<%end%>
</table>
<br />
但相反发生的事情似乎是寻找一条名为“检查”的路线,而不是验证问题是否正确。
我希望这是对我的问题的更好的介绍,我对这些东西还是新手。
答案 0 :(得分:1)
资源:quizzs 只会生成创建/读取/更新/销毁操作的路由。对于控制器中的任何自定义操作,需要将新路由条目添加到routes.rb文件中。一种方法是在资源块下声明新操作。
resources :quizzs do
member do
patch 'check'
end
end
如果你从shell运行rake routes
,你应该会看到一行会有quizzs #check。 Rails不知道rake routes
输出中不存在的任何路由。
希望这有助于解决问题并帮助您了解路由的工作原理。
答案 1 :(得分:0)
您的“检查”操作未被路由。低于resources :quizzs
添加
patch 'quizzs/check/:id.:format' to: 'quizzs#check' #this names might be different
我希望这能解决你的问题。
PD:您始终可以在终端中使用rake routes
来检查您定义的路线及其方法。
GL&amp; HF。