Rails教程第8.2.2节在用户输入无效数据时显示错误消息

时间:2011-12-04 21:09:06

标签: ruby-on-rails ruby-on-rails-3.1

我正在学习如何使用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的新手,不明白为什么。我提出这个帖子,以防有其他人同样挣扎。但任何有关正在发生的事情的解释都会非常受欢迎。

1 个答案:

答案 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模板,否则会重定向到其他位置。