2016-01-13 3 views
1

У меня проблемы с маршрутами в Ruby on Rails. Я настроил маршрутизирует этот путьНет совпадений при попытке зарегистрироваться

resources :users do 
    collection do 
    resource :registrations, only: [:show, :create] 
    resource :sessions, only: [:new, :create, :destroy] 
    resource :confirmations, only: [:show] 
    end 
end 

И у меня есть RegistrationsController, где у меня есть две конечные точки (новый, создать)

class RegistrationsController < ApplicationController 

    skip_before_filter :authenticate! 

    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(params[:user]) 
    if @user.save 
     flash[:notice] = t("registrations.user.success") 
     redirect_to :root 
    end 
    end 
end 

Но когда я делаю рельсы с и я поставил локальный: 3000/пользователей/registration/create или new Я получаю «никаких матчи маршрута». И я думаю, что путь существует, потому что если я raake маршрутов я получаю эту

registrations POST /users/registrations(.:format) registrations#create 
       GET /users/registrations(.:format) registrations#show 

Я знаю, что это должна быть нелепой ошибкой, но я не понимаю. Я признателен за любую помощь

ответ

1

При определении маршрутов для регистрации, вы ограничиваете его просто [:show, :create]:

resource :registrations, only: [:show, :create] 

Но ваш контроллер (правильно!) Является предполагая, что есть два пути: new (для отображения регистрационная форма) и create (для создания нового пользователя). Вам необходимо изменить маршруты, чтобы они соответствовали действиям вашего контроллера:

resources :users do 
    collection do 
    resource :registrations, only: [:new, :create] # Updated this line! 
    resource :sessions, only: [:new, :create, :destroy] 
    resource :confirmations, only: [:show] 
    end 
end 
+0

Вы правы. В контроллере не было смысла показывать без конечной точки. спасибо –

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