2011-09-23 144 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