我有一个名为 assignment 的模型,它表示用户和多项选择测验应用程序中的问题之间的丰富连接。当用户回答问题时,响应会记录在 assignments 控制器中的以下更新方法中
定义编辑 @assignment = Assignment.find_by_id(params[:id]) @user = @assignment.user @question = @assignment.question 提出“用户#{@user}问题#{@question}作业#{@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) 别的 放@assignment.save 提出“无法保存” 渲染(user_assignment_path(@user, @assignment) , :html => {:method => :get}) 结尾 结尾
我有一个在保存之前调用的等级,它会被调用。这是模型:
类分配 ActiveRecord::Base 属于_to:用户 属于_to:问题 attr_accessible :title, :body, :user_id, :question_id , :response before_save :等级 默认等级 self.correct = (response == self.question.solution) 除非 response == nil 结尾 结尾
因此,当我第一次提交响应时,保存工作完美,并相应地重定向了我。之后,如果我尝试再次编辑问题并重新提交表单,则保存失败。
谁能想到可能发生这种情况的原因?
另外我知道第二次重定向有错误,所以如果有人能纠正我的用法,那将是一个额外的帮助
编辑这里是编辑erb,以防有人在这里发现错误。我还在上面的控制器中添加了编辑方法。
<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>
编辑 2 我刚刚在 rails 控制台中手动完成了这些步骤,没有任何问题,所以一定有一些奇怪的事情发生了。