8

假设我有这样的事情:

def new
  @user = User.new
end
def create
  @user = User.create(params[:user])
  if @user.save
    flash[:notice] = 'User created'
    redirect_to :action => 'list'
  else
    flash[:error] = 'Some error here!'
    render 'new'
  end
end

我认为代码很清楚。
这里的问题是,当@user对象没有成功保存时,我应该渲染new(如上)还是应该重定向到new

我知道重定向到new用户输入的数据是否丢失,但如果我渲染new,URL 将/users/create代替/users/new(这很难看!)。

4

1 回答 1

2

你不使用是正确的redirect。重定向正在加载一个全新的资源。

render然而,这将使您的会话数据保持新鲜,并且根据您的表单设置方式,应该重新填充输入的任何数据。

你提到:

我知道重定向到新用户输入的数据是否丢失,但如果我呈现新的,URL 将是 /users/create 而不是 /users/new (这很难看!)。

不,这不是真的。如果你说render 'new',它将转到users/new未创建的 url。Create as an action 仅处理POST对控制器的请求,通常不会有与之关联的视图。相反,它将指代new处理任何错误和显示表单的操作。

create 动作与update只处理请求的动作相同PUT,但指的是edit处理视图显示的动作。

于 2012-07-30T09:29:54.110 回答