Rails рендерит путь маршрута - PullRequest
1 голос
/ 23 сентября 2011

Я все еще новичок в Rails и с трудом понимаю, как работает система путей в Rails.

В моем route.rb я создаю псевдоним для регистрации:

match 'signup' => 'user#new'
resource :user, :controller => 'user'

Действие там и переход к / регистрация показывает правильное действие. Пока все хорошо.

Теперь, когда я отправляю свою регистрационную форму, она запускает действие create с POST, как обычно. И вот где я застрял.

Если регистрация не удалась, я хотел бы снова предоставить пользователю форму регистрации. Одним из вариантов было бы сделать рендер "новым", но он переводит пользователя в / user вместо /signup.

UserController

class UserController < ApplicationController

  def new
    @user = User.new
  end


  def create

    @user = User.new(params[:user])

    if @user.save
      redirect_to root_url
    else
      render "new"
    end

  end

end

Любая помощь приветствуется!

ОБНОВЛЕНИЕ - НАЙДЕНО РЕШЕНИЕ

Добавлено 2 соответствия маршрутов для / регистрации, используя опцию: via

match 'signup' => 'user#new', :as => :signup, :via => 'get'
match 'signup' => 'user#create', :as => :signup, :via => 'post'

Таким образом, приложение знает, что при публикации в / signup оно должно запускать действие create, а когда используется http-метод get, оно использует новое действие.

Разметка контроллера аналогична указанной выше.

1 Ответ

0 голосов
/ 24 сентября 2011

Попробуйте добавить ":as" к вашему маршруту следующим образом:

match 'signup' => 'user#new', :as => :signup

, а затем сделать

redirect_to signup_url

в вашем контроллере.

Это сработало для меня. Я до сих пор не знаю почему. Может быть, у кого-то есть объяснение.

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