2011-09-23 140 views
1

我有一個用戶,評論,路線如圖所示模型:Ruby on Rails的嵌套資源路由錯誤

class User < ActiveRecord::Base 
has_many :routes, :dependent => :destroy 
has_many :comments, :dependent => :destroy 
end 

class Route < ActiveRecord::Base 
belongs_to :user 
end 

class Comment < ActiveRecord::Base 
belongs_to :user 
end 

我有routes.rb中文件嵌套內用戶的意見和路線如圖所示:

MyApp::Application.routes.draw do 
resources :users do 
resources :comments 
resources :routes 
end 

當我運行「耙路線」,到Routes_controller指數的路線會出現像這樣:

user_routes GET /users/:user_id/routes(.:format) {:action =>"index", :controller=>"routes"} 

然而,由於某些原因當用戶登錄時,我收到路由錯誤,指出無法找到路由控制器。當系統在會話控制器中發佈新會話時會發生這種情況。我知道它試圖登錄用戶,但重定向失敗。有什麼建議麼?

class SessionsController < ApplicationController 
... 
def create 
user = User.authenticate(params[:session][:email], 
         params[:session][:password]) 
if user.nil? 
    flash.now[:error] = "Invalid email/password combination." 
    @title = "Sign in" 
    render 'new' 
else 
    sign_in user 
    redirect_to user_routes_path 
end 
end 
... 
end 

出於某種原因,當我重定向到user_routes_path沒有顯示堆棧跟蹤,所以我必須直接到root_path,同樣的事情發生了。下面是與追蹤:

app/views/layouts/_header.html.erb:3:in 
    `_app_views_layouts__header_html_erb___917786942_46449696_315190' 
app/views/layouts/application.html.erb:11:in 
    `_app_views_layouts_application_html_erb__423035099_46500948_0' 
+0

你的'user_routes_path'應該至少有一個'user_id'。但這不是你的問題......你可以添加路由錯誤的堆棧跟蹤嗎? – mliebelt

+0

@mliebelt我添加了堆棧跟蹤 – Andrew

回答

0

我會試試看,閱讀Fernandez: The rails 3 wayredirect_to後。

當你從rake routes輸出,你輸出:

user_routes GET /users/:user_id/routes(.:format) {:action =>"index", :controller=>"routes"} 

您可以使用該路線的方法是:

  • user_routes_url:全URL(以協議和一切)
  • user_routes_path:主機的相對URL

但是您的user_routes告訴你另一件事:URL必須包含user_id,而此user_id必須來自某處。於是打電話給不同的URL和路徑方法,你一定要看的參數:

  • users_path:無參數,顯示所有用戶
  • user_path(@user):一個說法,因爲需要有關用戶的信息。可以是用戶,也可以是user_routes_path(@user):需要用戶,以便可以顯示一個用戶的所有路由(索引視圖)。

在你所以包括在控制器源代碼:

... 
else 
    sign_in user 
    redirect_to user_routes_path(user) 
end 
... 

我不明白你已經附加了錯誤信息,但我覺得你應該先糾正路徑調用。

+0

我今天在書店,其中一個人說的是同樣的事情。感謝您的幫助。 – Andrew