Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby测验设置_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails Ruby测验设置

Ruby on rails Ruby测验设置,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,在列出的第一个答案的评论中得到了答案,它一直在验证,我只需要将flash添加到视图中 如何更改此代码以验证答案是否正确 我遵循了这个教程 我现在在点击提交答案按钮时遇到的错误是“No route matches[POST]”/quizzs/check/1”-因此它看起来不是在验证答案和重定向,而是在搜索另一个名为“check”的页面来显示 它应该做的是对答案运行check(/quizzs\u controller.rb),以验证答案是否正确 /quizzs_controller.rb cla

在列出的第一个答案的评论中得到了答案,它一直在验证,我只需要将flash添加到视图中

如何更改此代码以验证答案是否正确

我遵循了这个教程

  • 我现在在点击提交答案按钮时遇到的错误是“No route matches[POST]”/quizzs/check/1”-因此它看起来不是在验证答案和重定向,而是在搜索另一个名为“check”的页面来显示
它应该做的是对答案运行check(/quizzs\u 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

...
class-quizzscoontroller[:主页,:应答,:应答,:检查]
...
def检查
@quizz=quizz.find(参数[:id])
回应待办事项|格式|
如果参数[:ans][0].to_i==@quizz.correctAns
flash[:notice]=“祝贺你。您对问题给出了正确答案:“++@quizz.question+”
format.html{redirect_to({:controller=>“quizzs”,:action=>“answering”,:id=>“1”}
format.xml{head:ok}
其他的
flash[:notice]=“对不起,这不是问题的正确答案:++@quizz.question+”
format.html{redirect_to({:controller=>“quizzs”,:action=>“answering”,:id=>“1”}
format.xml{head:ok}
结束
结束
结束
...
因此,当您点击下面视图中的按钮时,它会运行“检查”以验证答案,并在它重定向到的页面上显示相应的消息,该页面为/answering.html.erb

/answer.html.erb

*我在form_标签之前添加了“=”符号,这是对原始代码的唯一更改(除非我仍然没有发现拼写错误)

。。。
“检查”,:id=>@quizz.id)do%>

正确答案是数字:

“测验”、:动作=>“回答”、:id=>“1”}%> ...
返回此页面并显示消息

/responding.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 />
您想回答哪个问题
问题:
“测验”,:action=>“答案”,:id=>quizz.id%>

但实际上,它似乎是在寻找一条叫做“检查”的路线,而不是验证问题是否正确

我希望这能更好地表达我的问题,我对这方面还是新手。

您的“检查”操作没有被执行。下面
参考资料:测验
添加

patch 'quizzs/check/:id.:format' to: 'quizzs#check' #this names might be different
我希望这能解决你的问题

PD:您始终可以在终端中使用
rake routes
检查您定义的路由及其方法


GL&HF。

参考资料:测验只会为创建/读取/更新/销毁操作生成路由。对于控制器中的任何自定义操作,需要将新路由条目添加到routes.rb文件中。这样做的一种方法是在参考资料块下声明新操作,如下所示

resources :quizzs do
   member do
     patch 'check'
   end
end
如果您在shell中运行
rake routes
,您应该会看到一行将有测验#检查。Rails不知道
rake routes
输出中不存在的任何路由


希望这有助于解决问题,并帮助您了解路由是如何工作的。

如果您能缩小您的问题和相关代码/错误的范围,我很乐意为您提供帮助。帮助初学者的问题通常是快速而彻底的,只要您不必用堆积如山的文本和庞大的多部分问题来打倒我们。提前谢谢。对不起但是,我试图缩小重点,使之更具体,希望这是一个更好的问题。然后将这条路线添加到您的“获取”中。我在这里是瞎的,因为这不是我的开发机器。我以前尝试过(现在又尝试过)但这并没有改变错误。我想我正在努力表达我的问题。我不需要创建检查路线,检查应该验证答案(正确或不正确)一旦它这样做了,在重定向时会显示相应的消息,它会在我遵循的教程中这样做,但在我运行它时不会这样做,我无法弄清楚原因(抱歉,我对这东西不熟悉,希望解释有意义).查看
rake routes
输出的内容。然后试一试。作为旁注,你不需要重新定义@quizz,因为你有一个before_动作可以做到这一点。感谢你的时间和回答Kandala先生,很抱歉我无法更好地表达我的问题,据我所知,检查不应该是另一页,它应该是a在答案上运行以验证正确或错误的action,因此它不是一个路由,而是一个操作(不确定该术语是否正确),在我遵循的教程中,它就是这样做的,但当我尝试重新创建它而不是验证答案时,它尝试重定向到不存在的页面(据我所知,该教程从未创建过)。再次感谢您的时间。此外,我尝试输入了该代码,但它没有验证答案,它仍然指向“检查”页面。@RockwellRice当您说它仍然指向“检查”页面时,错误是相同的(“没有路由匹配…”)是的,错误是相同的,post路由显示在routes错误部分,但是id和检查被切换,我正在尝试在代码中的某个地方找到它。只是澄清一下,路由文件中的路由意味着应用程序中的有效URL,而不管该URL是将用户带到新页面还是更新当前页面的一部分页面(使用Ajax和Javascript)。路由由控制器以及操作和请求参数(如果有)(quizzs/:id/check)标识。请记住,您必须使用适当的动词(GET/PUT/PATCH)在routes.rb文件中为所有自定义路由(应答、应答等)添加自定义路由.它还在抱怨测验、检查或其他路线吗?
resources :quizzs do
   member do
     patch 'check'
   end
end