Ruby on Rails嵌套资源路由错误

时间:2011-09-23 03:53:50

标签: ruby-on-rails-3

我有一个用户,评论和路线模型,如下所示:

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

当我运行'rake routes'时,到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'

1 个答案:

答案 0 :(得分:0)

在阅读有关redirect_to的{​​{3}}后,我会尝试一下。

当你查看rake routes的输出时,你得到了输出:

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

您可以使用该路线的方法是:

  • user_routes_url:完整网址(包含协议和所有内容)
  • user_routes_path:主机的相对网址

但是您的user_routes告诉您另一件事:网址必须包含user_id,此user_id必须来自某个地方。因此,要调用不同的url和path方法,您必须查看参数:

  • users_path:没有参数,显示所有用户
  • user_path(@user):一个参数,因为需要有关用户的信息。可以是用户,也可以是user_id
  • `user_routes_path(@user):需要用户,以便显示一个用户的所有路由(索引视图)。

所以在控制器中包含你的源代码:

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

我不明白你附加的错误信息,但我认为你应该先纠正路径调用。