私は割り当てと呼ばれるモデルを持っています。これは、多肢選択式クイズ アプリでのユーザーと質問の間の豊富な結合を表しています。ユーザーが質問に答えると、応答は割り当てコントローラーの次の更新メソッドに記録されます
デフォルト編集
@assignment = Assignment.find_by_id(params[:id])
@user = @assignment.user
@question = @assignment.question
puts "ユーザー #{@user} 質問 #{@question} 課題 #{@assignment}"
終わり
デフォルト更新
@assignment = Assignment.find(params[:id])
@user = @assignment.user
@assignment.update_attributes(:response => params[:assignment][:response])
@assignment.save の場合
flash[:notice] = "あなたの回答は保存されました"
redirect_to(:action => 'show', :id => @assignment.id , :user_id => @user.id)
そうしないと
puts @assignment.save
puts 「保存できませんでした」
render(user_assignment_path(@user, @assignment) , :html => {:method => :get})
終わり
終わり
呼び出されるグレードと呼ばれる保存前があります。モデルは次のとおりです。
クラス代入 ActiveRecord::Base
所属先:ユーザー
所属先:質問
attr_accessible :title, :body, :user_id, :question_id , :response
before_save :グレード
デフグレード
self.correct = (response == self.question.solution) 応答 == nil でない限り
終わり
終わり
そのため、初めて応答を送信すると、保存は完全に機能し、それに応じてリダイレクトされます。その後、質問を再度編集してフォームを再送信しようとすると、保存に失敗します。
これが発生している理由を考えられる人はいますか?
さらに、2 番目のリダイレクトにエラーがあることはわかっています。
編集 誰かがここで何か間違ったことを見つけた場合に備えて、編集 erb を次に示します。上記のコントローラーに edit メソッドも追加しました。
<div class="admin-display">
<%if @admin%>
<p>
You may edit the user's response below or change the question to override whether the question is marked correct.
</p>
<%end%>
</div>
<div class="question body">
<%= @question.question %>
</div>
<div class="answer-choices">
<%= params[:user_id] + " " + params[:id] %>
<ol type="A">
<%=form_for(@assignment , :url => user_assignment_path(params[:user_id] , params[:id]) , :html => {:method => "put"}, :user_id => params[:user_id]) do |f|%>
<%[@question.answerA, @question.answerB ,@question.answerC ,@question.answerD].each do |choice|%>
<li>
<%= f.radio_button(:response, choice)%>
<%= choice %>
</li>
<%end%>
</ol>
<div class="form-buttons">
<%= submit_tag("Submit Response") %>
</div>
<%end%>
</div>
EDIT 2 Railsコンソールで問題なく手順を実行したところなので、何か奇妙なことが起こっているに違いありません。