当在保存中出现问题时,我现在做以下操作,但感觉有点不对。
if @store.update_attributes(params[:store])
redirect_to admin_stores_path, notice: "Updated ..."
else
flash[:alert] = "Error"
render action: 'edit'
end
使用浏览器的导航功能和redirect_back或其他东西会更好吗?我甚至不记得我从哪里复制了上面的代码,但它确实有时会产生一些奇怪的结果。
谁能告诉我处理保存失败的最好方法?导航明智吗?
使用render
而不是redirect
的原因很简单:
-
您保留对象变量,这样用户就不必在输入错误时重新输入所有内容。
-
错误被存储在对象本身中,所以你需要它来显示它们
通常当你编写控制器动作时,你会处理两种情况:成功和失败。如果发生错误,您将呈现相同的操作以显示验证错误,如果操作成功,您将redirect_to somewere。这是一种常见的做法,你甚至可以在不同的Rails书籍中找到这样的"模式"。关于redirect_to:back,我不喜欢使用它,因为它会带来很多麻烦:)
这是在rails中处理表单提交最常用的方式。当对象被保存时,你希望用户重定向其他页面,主要是显示页面。
最重要的是渲染动作,当你说渲染动作时你实际上想要渲染那个动作的视图。该视图有form_for和error_message_for,它们呈现表单与预填充的输入值和对象错误发生在保存它。