2016-01-13 42 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 

但是当我做轨道S和我把本地主机:3000 /用户/注册/创建或新我得到一个“无路线匹配”。而且我觉得路线存在,因为如果我这样做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

您说得对。在控制器中没有和终点没有意义。谢谢 –