重定向到编辑时保持模型有错误

时间:2015-07-21 14:33:26

标签: ruby-on-rails

如果在更新我的模型时出错,我正在渲染:编辑,但这会从我的网址中删除/edit因为#update#show相同而不同请求方法。为了解决这个问题,我尝试按照here给出的建议,但这导致我在尝试提交无效表单时出现ActionDispatch::Cookies::CookieOverflow错误。我应该如何正确地重新呈现编辑页面,同时同时保留/edit网址和Flash消息?是否可以检查有效性并显示错误而无需调用更新?

原始代码:

def edit
end

def update
  respond_to do |format|
    format.html do
      if @model.update(model_params)
        redirect_to home_base_url_or_default(model_url(@model)), notice: "Successfully updated."
      else
        render :edit
      end
    end
  end
end

代码失败:

def edit
  if flash[:model]
    @model = flash[:model]
  end
end

def update
  respond_to do |format|
    format.html do
      if @model.update(model_params)
        redirect_to home_base_url_or_default(model_url(@model)), notice: "Successfully updated."
      else
        flash[:model] = @model
        redirect_to :action => :edit
      end
    end
  end
end

2 个答案:

答案 0 :(得分:1)

在这种情况下,不是进行重定向,而是通过执行渲染来解决问题,然后通过在控制器中设置实例var来控制视图,说明它是否是编辑页面。还可以使用CSS中的update类。但是,这仍然具有显示页面的URL,但至少布局是正确的。

答案 1 :(得分:0)

执行此操作的一种方法是允许edit操作也接受POST方法。使用request.method检查它是POST还是GET,然后相应地执行renderredirect