我有一个用户,评论和路线模型,如下所示:
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'
答案 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
所以在控制器中包含你的源代码:
...
else
sign_in user
redirect_to user_routes_path(user)
end
...
我不明白你附加的错误信息,但我认为你应该先纠正路径调用。