我有一个名为 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 控制台中手动完成了这些步骤,没有任何问题,所以一定有一些奇怪的事情发生了。