2011-09-23 4 views
1

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

В моем routes.rb я создать псевдоним для Signup:

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

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

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

Если регистрация не удалась, я хотел бы снова представить пользователю форму регистрации. Один из вариантов заключается в том, чтобы сделать рендер «новый», но это приводит к тому, что пользователь/пользователь вместо/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 матч маршрутизации для/регистрации, используя: с помощью опции

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

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

Разметка контроллера такая же, как и выше.

ответ

0

Попробуйте добавить ":as" Вам маршрут, как это:

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

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

redirect_to signup_url 

в контроллере.

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

+0

Hi Hiasinho, спасибо за ваш ответ. Это будет работать при перенаправлении на регистрацию. Дело в том, что я хотел бы сохранить объект пользователя, чтобы форма была заполнена. Однако ваш ответ привел меня в правильном направлении. Я добавлю результат. –