2013-09-28 4 views
0

Так я создал свои маршруты так:Непонимание маршрутов в рельсах

StartPoint::Application.routes.draw do 
    get 'login' => 'sessions#new', :as => 'login' 
    get 'logout' => 'sessions#destroy', :as => 'logout' 
    get 'signup' => 'users#new', :as => 'signup' 

    resource :home, controller: 'home' 
    resources :users 
    resources :sessions 

    root 'home#show' 
end 

Как когда-либо, когда я иду, чтобы зарегистрироваться и не заполнить соответствующие данные Он всегда берет меня bla.com/users вместо регистрации. Он должен всегда возвращаться, чтобы зарегистрироваться. мой контроллер выглядит следующим образом, для нового и создать

class UsersController < ApplicationController 
    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(user_signup_params) 
    if @user.save 
     redirect_to root_path 
    else 
     render :new 
    end 
    end 
end 

Некоторые один сказал мне, что, когда он выходит из строя, чтобы видеть все сообщения об ошибках, которые я должен вернуться к новому методу, который затем показывает мне все мои ошибки. Как бы то ни было, новый метод имеет совершенно другую структуру URL, а затем создает. Независимо от того, если есть ошибки - мне нужно, чтобы он вернулся к bla.com/signup, а не bla.com/users

+0

В Rails, так как контроллеры на основе RESTful архитектуры, вам необходимо иметь два различных пути для '' new' и create'. Вы хотите сделать оба с тем же маршрутом. Возможно, этот вопрос может быть полезен: http://stackoverflow.com/questions/2472393/rails-new-vs-create – depa

ответ

0

Если вы не имеете пост

post 'login' => 'sessions#create', :as => 'login' 
get 'login' => 'sessions#new', :as => 'login' 
get 'logout' => 'sessions#destroy', :as => 'logout' 
get 'signup' => 'users#new', :as => 'signup' 
+0

выдает сообщение о том, что у него нет шаблонов для этого типа настройки. – Adam

+0

просто чтобы убедиться, что я имел в виду дополнительно. get 'login приводит вас к форме входа в систему, сообщение' login '- это то, к чему относится форма. –

-1

Действие вашей формы: /users. Итак, после POSTing до /users вам либо нужно перенаправить на другой URL-адрес (/signup), либо просто быть удовлетворен конечной точкой /users. Примечание: если вы redirect_to signup_path, вы потеряете данные, которые вы отправили.

Ваш лучший вариант может заключаться в том, чтобы не использовать ресурс для вашей регистрации.

match 'signup' => 'users#signup'

Затем в контроллере, обрабатывать как почт и GETs:

def signup 
    if request.post? 
    @user = User.new(user_signup_params) 
    if @user.save 
     redirect_to root_path 
    end 
    end 
    render :new 
end 

Документация для request object.

+0

Ум, вы никогда не определяли пост метода? его не нравится, он не понимает, что это такое: 'NoMethodError' – Adam

+0

Моя ошибка, я имел в виду' request.post? 'По какой-то причине я думал, что она доступна напрямую в контроллерах. – whitehat101

Смежные вопросы