假设我有这样的事情:
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
Run Code Online (Sandbox Code Playgroud)
我认为代码很清楚.
这里的问题是,当@user对象未成功保存时,我应该渲染new(如上所述)还是应该重定向到new?
我知道如果重定向到new用户输入的数据是丢失的,但是如果我渲染new,则URL将/users/create代替/users/new(这很丑陋!).
您不使用是正确的redirect。重定向正在加载全新的资源。
render但是,将使您的会话数据保持最新,并且根据表单的设置方式,应重新填充输入的任何数据。
你提到:
我知道如果重定向到 new 用户输入的数据会丢失,但如果我渲染 new,URL 将是 /users/create 而不是 /users/new (这很丑陋!)。
不,这不是真的。如果你说render 'new',它将转到该网址而users/new不是创建。创建操作仅处理POST对控制器的请求,通常不会有与之关联的视图。相反,它将指的new是处理任何错误和显示表单的操作。
create 操作与update仅处理请求来执行相同操作的操作有共同点PUT,但指的edit是处理视图显示的操作。
| 归档时间: |
|
| 查看次数: |
1563 次 |
| 最近记录: |