Ruby on rails Rails快讯
我正在Rails上构建一个应用程序,用户在其中创建一个测试,进入该测试的show视图并填写一个表单,其中包含一个问题的答案。如果问题的答案与“正确答案”(在控制器中定义)相匹配,则会出现提示答案正确的闪烁消息,并会出现一个按钮,以继续到根路径。如果答案是错误的,闪光灯会显示“错误答案” 我的问题是,即使没有给出答案,flash消息也会说错误的答案。我只希望在用户提交表单后显示该消息。我理解为什么会发生这种情况,我只是不确定如何修复它。以下是测试的显示视图:Ruby on rails Rails快讯,ruby-on-rails,flash-message,Ruby On Rails,Flash Message,我正在Rails上构建一个应用程序,用户在其中创建一个测试,进入该测试的show视图并填写一个表单,其中包含一个问题的答案。如果问题的答案与“正确答案”(在控制器中定义)相匹配,则会出现提示答案正确的闪烁消息,并会出现一个按钮,以继续到根路径。如果答案是错误的,闪光灯会显示“错误答案” 我的问题是,即使没有给出答案,flash消息也会说错误的答案。我只希望在用户提交表单后显示该消息。我理解为什么会发生这种情况,我只是不确定如何修复它。以下是测试的显示视图: <div class="col-
<div class="col-md-8 col-md-push-2">
<h4>Current Score: <%= @test.score %></h4>
<br /><br />
<div class="form_group">
<%= form_tag test_path(@test), :method=> 'get' do %>
<h4>What is my first name?</h4>
<div class="form-group">
<%= text_field_tag :answer, params[:answer], class: 'form-control' %>
</div>
<% if !flash[:success] %>
<div class="form-group">
<%= submit_tag "Submit", class: "btn btn-primary" %>
</div>
<% end %>
<% end %>
</div>
<% if flash[:success] %>
<%= link_to "Continue", root_path, class: "btn btn-success pull-right" %>
<% end %>
</div>
当前分数:
'获取'执行%>
我的名字是什么?
以下是用于测试的控制器,其中包含有问题的show操作:
class TestsController < ApplicationController
def index
@test = Test.new
@tests = Test.all
end
def show
@test = Test.find(params[:id])
correct_answer = "jack"
user_answer = params[:answer]
if user_answer == correct_answer
flash.now[:success] = "That is correct!"
new_score = @test.score += 1
@test.update(score: new_score)
elsif params[:answer] != correct_answer
flash.now[:danger] = "Wrong answer"
end
end
def create
@test = Test.create(test_params)
if @test.save
redirect_to test_path(@test)
flash[:success] = "Test created"
else
flash[:danger] = "There was a problem"
render "index"
end
end
def destroy
@test = Test.find(params[:id])
if @test.destroy
flash[:success] = "Your test was removed"
redirect_to root_path
end
end
private
def test_params
params.require(:test).permit(:score, :user_id)
end
end
class TestsController
有更好的方法吗?如果没有,我能否以某种方式阻止flash消息在初始加载时出现?我只希望它出现在表单提交后。提前谢谢 因此,您的闪存被触发,因为
参数[:应答]
未定义,而不是==
到插孔
你说:
我的问题是,即使没有给出答案,flash消息也会说错误的答案
但是对于这个结果,您的逻辑是关闭的,您的代码表示已定义了params[:answer]
,因为表单尚未呈现,所以不能定义
也许你的情况应该是:
elsif params[:answer].present? && params[:answer] != correct_answer
flash.now[:danger] = "Wrong answer"
end
传统上,表单的显示和
POST
到表单都是单独的操作,这就是为什么在任何事情发生之前,您都会看到此flash。是否使用params[:answer]
仅在提交表单时可用?您还可以使用初始加载时在服务器中生成的参数更新问题吗?