私は割り当てと呼ばれるモデルを持っています。これは、多肢選択式クイズ アプリでのユーザーと質問の間の豊富な結合を表しています。ユーザーが質問に答えると、応答は割り当てコントローラーの次の更新メソッドに記録されます
デフォルト編集 @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コンソールで問題なく手順を実行したところなので、何か奇妙なことが起こっているに違いありません。