Руководство по Rails Глава 8.2.2. Отображение сообщений об ошибках, когда пользователь вводит неверные данные. - PullRequest
1 голос
/ 05 декабря 2011

Я учусь регистрировать пользователя, используя формы на 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 Ответ

1 голос
/ 05 декабря 2011

Вы должны получить эту ошибку только в том случае, если ваш @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, в противном случае перенаправить в другое место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...