如果在更新我的模型时出错,我正在渲染:编辑,但这会从我的网址中删除/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
答案 0 :(得分:1)
在这种情况下,不是进行重定向,而是通过执行渲染来解决问题,然后通过在控制器中设置实例var来控制视图,说明它是否是编辑页面。还可以使用CSS中的update
类。但是,这仍然具有显示页面的URL,但至少布局是正确的。
答案 1 :(得分:0)
执行此操作的一种方法是允许edit
操作也接受POST
方法。使用request.method
检查它是POST
还是GET
,然后相应地执行render
或redirect
。