【发布时间】:2011-02-18 22:10:07
【问题描述】:
我是 Rails 新手,我不确定我是否同意我在一些教程中所做的事情。这个问题与如何处理无效的表单提交有关。做事的标准方式似乎是:
class ThingsController < ApplicationController
# POST /things
def create
@thing = Thing.new(params[:thing])
if @thing.save
flash[:notice] = 'Thing created'
redirect_to(@thing)
else
render :action => :new
end
end
当@thing.save 失败时,用户会看到相同的表单,其中预先填写了他刚刚输入的值,以及出现的问题。到目前为止一切都很好,除了现在 URL 已从 /things/new 更改为 things/,人们希望它会呈现索引视图。
此外,如果用户刷新页面,他现在正在查看索引视图。如果他点击返回,系统会提示他重新提交表单,而我一直试图避免这种情况。如果我redirect_to(new_thing_path),则用户之前的提交将丢失,错误消息也是如此。
我意识到 RESTful,这种方法可能是“正确的”,因为创建事物对象应该是 POST 到 /things 的结果,但是从用户界面的角度来看,我并不特别关心它。
我可以“手动”将无效的@thing 对象保存在用户的会话中,以便在我将他重定向回 new_thing_path 后显示,但这感觉就像是 hack。似乎应该有一种“轨道方式”来做到这一点。
想法?
【问题讨论】:
-
我对 Rails 核心也有同样的抱怨,但你的措辞比我做得好:) 好问题。
标签: ruby-on-rails-3