我正在学习如何使用Rails上的表单注册用户,并通过输入以下链接Rails Rutotrial:
class UsersController < ApplicationController
def create
@user = User.new(params[:user])
if @user.save
# Handle a successful save.
else
@title = "Sign up"
render 'new'
end
end
end
但是,这给了我以下错误:
Missing template users/create, application/create with {:handlers=>[:erb, :builder, :coffee], :formats=>[:html], :locale=>[:en, :en]}
请注意确定原因,但是当我修改代码时:
class UsersController < ApplicationController
def create
@user = User.new(params[:user])
if @user.save
# Handle a successful save.
else
@title = "Sign up"
render :action => 'new'
end
end
end
这很有用。我是Rails的新手,不明白为什么。我提出这个帖子,以防有其他人同样挣扎。但任何有关正在发生的事情的解释都会非常受欢迎。
答案 0 :(得分:1)
如果@user.save
成功,您应该只会收到该错误。从您的代码中,本质上正在发生的是
if @user.save
# Handle a successful save
else
@title = "Sign up"
render 'new'
end
render 'create'
因为如果你没有告诉它渲染任何内容,它会呈现views/users/create.html.erb
(又名/views/{controller}/{action}.html.erb
)并且看起来views/users/create.html.erb
不存在(请注意,如果你是使用HAML,它将是views/users/create.html.haml
)。也许你正在寻找像
if @user.save
redirect_to root_path and return
end
@title = "Sign up"
render 'new'
这样,如果@user.save
无法保存,它将始终呈现new
模板,否则会重定向到其他位置。