【发布时间】:2011-03-18 04:00:28
【问题描述】:
假设我正在使用一个表单和一个标准的 Rails restful 控制器创建一个新的 Foo,它看起来像这样:
class FoosController < ApplicationController
...
def index
@foos = Foo.all
end
def new
@foo = Foo.new
end
def create
@foo = Foo.create(params[:foo])
if @foo.save
redirect_to foos_path, :notice => 'Created a foo.'
else
render 'new'
end
end
...
end
所以,如果我使用标准的 restful 控制器(如上),那么当我创建 Foo 时,我在 example.com/foos/new,如果我提交表单并正确保存,我在 example.com/foos 显示索引动作。但是,如果未正确填写表单,则会再次呈现表单并显示错误消息。这都是普通的香草。
但是,如果显示错误,将呈现表单页面,但 URL 将是 example.com/foos,因为 CREATE 操作发布到该 URL。但是,人们会期望在example.com/foos 找到 Foos#index,而不是他们现在刚刚提交并添加了错误消息的表单。
这似乎是 Rails 的标准行为,但对我来说没有多大意义。显然,我可以重定向回 new 而不是从 create 操作呈现 new,但问题是错误消息等会随着内存中部分完整的 Foos 丢失。
对于这个问题是否有一个干净的解决方案,当他们提交的新 Foo 表单中出现错误时,一种将人们送回 example.com/foos/new 的方法?
谢谢!
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 url view controller