Rails验证 - 重定向无法正常工作

时间:2013-10-31 13:57:41

标签: ruby-on-rails ruby-on-rails-3 validation

我觉得这个有些愚蠢,但是:

if @prof.update_attributes(params[:profile])
      respond_to do |format|
        format.html {redirect_to(@prof, :notice => "Profile successfully created.") }
      end
    end

...在我的控制器的更新方法中。我在模型中验证了一些属性。

如果验证失败,我只想让它们回到同一个表格上,以便用各种红色文字进行骂。 (即错误数组中的所有内容)。

验证失败时,我收到“模板丢失”错误 - “更新”模板。我觉得我忽略了一些非常简单的事情。救命啊!

2 个答案:

答案 0 :(得分:2)

试试这个:

respond_to do |format|
  if @prof.update_attributes(params[:profile])
    format.html { redirect_to(@prof, :notice => "Profile successfully created.") }
  else
    format.html { render action: 'edit' }
  end
end

答案 1 :(得分:1)

错误的原因是由于除非另有说明,否则Rails将尝试呈现与操作同名的模板,在本例中为update,这显然不存在。

您要做的是告诉rails在发生错误时再次呈现edit操作。通常,您可以使用respond_to块执行此操作,从而允许块以不同的方式响应,具体取决于验证是通过还是失败。

目前,你有if语句包装块,并且没有语句告诉rails在发生错误时以不同方式呈现。要解决这个问题,我会做以下事情:

respond_to do |format|
    if @prof.update_attributes(params[:profile])
        # all is well, redirect as you already wrote
    else
        format.html { render action: 'edit' }
    end
end