Ruby on rails Rails 4:在“";渲染:编辑";内部控制器
我有一个控制器Ruby on rails Rails 4:在“";渲染:编辑";内部控制器,ruby-on-rails,validation,Ruby On Rails,Validation,我有一个控制器 def update @patient = Patient.find(@score.patient_id) respond_to do |format| if @score.update(score_params) format.html { redirect_to score_path(@score), notice: 'Score was successfully updated.' } format.json { r
def update
@patient = Patient.find(@score.patient_id)
respond_to do |format|
if @score.update(score_params)
format.html { redirect_to score_path(@score), notice: 'Score was successfully updated.' }
format.json { render :show, status: :ok, location: @score }
else
format.html { render :edit }
format.json { render json: @score.errors, status: :unprocessable_entity }
end
end
end
编辑“分数”对象并通过验证后,一切正常
然而(问题就在这里),在侧边栏中我有一个“此分数的当前条目”框,它基本上显示了对象的当前条目。它看起来像这样:
<div class = "CompletionFrame">
<div class="page-header">
<h4>Your scores for this case</h4>
</div>
</div>
<ol>
<%= @score.exists(@score.dx1, @score.dxcon1) %>
<%= @score.exists(@score.dx2, @score.dxcon2) %>
<%= @score.exists(@score.dx3, @score.dxcon3) %>
<%= @score.exists(@score.dx4, @score.dxcon4) %>
<%= @score.exists(@score.dx5, @score.dxcon5) %>
</ol>
你对这个案子的分数
属性的细节并不重要。奇怪的是,如果我尝试使用无效属性进行更新,控制器会呈现编辑视图,但无效条目会显示在“此分数的当前条目”中。如果我转到另一个页面,然后再返回到此页面,则会显示旧的(未编辑的)条目。换句话说,无效条目不会被保存,但它们会显示在控制器的初始render:edit调用中
我的问题是:
为什么会这样
如何防止对单个“渲染”的侧边栏进行更新
我希望这是有道理的 update方法更改实例变量对象的局部值,然后尝试保存它。如果验证失败(因为本地值未通过验证),则该对象不会保存到数据库中,但它的实例变量(保存字段数据)中仍有数据。换句话说,它与从数据库中加载的版本不同 当您执行
render
时,它会使用@score变量呈现页面,您已经为该变量更改了本地数据
重新加载页面时,通过从数据库加载对象来设置该对象,从而获取“旧的”有效数据
在验证失败时呈现编辑页面非常有用,因为您可以在表单中显示有关验证失败的字段的信息:例如,突出显示问题字段并显示一些有用的反馈
如果您的编辑页面正在执行其他依赖于对象具有有效数据的操作,那么您应该重定向到该对象,而不仅仅是渲染,这将使rails重新加载对象,或者将失败的对象保存到其他地方使用的变量中,以便您可以在页面上显示保存的数据,并且仍然将失败的对象(带有验证错误等)保存在表单中。update方法更改实例变量对象的局部值,然后尝试保存它。如果验证失败(因为本地值未通过验证),则该对象不会保存到数据库中,但它的实例变量(保存字段数据)中仍有数据。换句话说,它与从数据库中加载的版本不同 当您执行
render
时,它会使用@score变量呈现页面,您已经为该变量更改了本地数据
重新加载页面时,通过从数据库加载对象来设置该对象,从而获取“旧的”有效数据
在验证失败时呈现编辑页面非常有用,因为您可以在表单中显示有关验证失败的字段的信息:例如,突出显示问题字段并显示一些有用的反馈
如果您的编辑页面正在执行其他依赖于对象具有有效数据的操作,那么您应该重定向到该对象,而不仅仅是渲染,这将使rails重新加载对象,或者将失败的对象保存到其他地方使用的变量中,以便您可以在页面上显示保存的数据,并且表单中仍然有失败的对象(带有验证错误等)