私は、ユーザーがテストを作成し、そのテストの表示ビューに移動し、質問への回答を含むフォームを塗りつぶすアプリケーションをビルドしています。質問に対する答えが(コントローラで定義されている)「correct_answer」と一致する場合は、答えが正しいというフラッシュメッセージが表示され、root_pathに進むボタンが表示されます。答えが間違っていると、フラッシュに「間違った答え」と表示されます。Railsのフラッシュメッセージ
私の問題は、答えが与えられていなくても、フラッシュメッセージが間違った答えを言うということです。ユーザーがフォームを送信した後にそのメッセージが表示されるようにしてください。私はなぜこれが起こっているのか理解しています、私はそれを修正する方法については不明です。ここでは、テストのためのショーのビューは次のとおりです。ここで
<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
はこれを行うには良い方法はありますか?もしそうでなければ、どういうわけか初期の負荷にフラッシュメッセージが現れないようにすることはできますか?フォームが提出されたら、それが表示されるようにします。前もって感謝します。
フォームを提出したときにのみ 'params [:answer]'は利用できますか? – Pavan
初期ロード時にサーバーで生成された 'params 'で質問を更新できますか? – Pavan