2011-05-24 84 views
1

我试图重定向用户登录到他们的个人资料页面,但得到以下错误。设计after_sign_in_path_for生成路由错误

No route matches {:action=>"create", :controller=>"trooper_profiles"} 

这是我关注的指南。 https://github.com/plataformatec/devise/wiki/How-to:-redirect-to-a-specific-page-on-successful-sign-in

在我application_controller我已经添加

def after_sign_in_path_for(resource) 
    trooper_trooper_profile_path 
end 

耙路线显示:

trooper_trooper_profile POST /troopers/:trooper_id/trooper_profile(.:format)  {:action=>"create", :controller=>"trooper_profiles"} 
new_trooper_trooper_profile GET /troopers/:trooper_id/trooper_profile/new(.:format) {:action=>"new", :controller=>"trooper_profiles"} 
edit_trooper_trooper_profile GET /troopers/:trooper_id/trooper_profile/edit(.:format) {:action=>"edit", :controller=>"trooper_profiles"} 
GET /troopers/:trooper_id/trooper_profile(.:format)  {:action=>"show", :controller=>"trooper_profiles"} 
PUT /troopers/:trooper_id/trooper_profile(.:format)  {:action=>"update", :controller=>"trooper_profiles"} 
DELETE /troopers/:trooper_id/trooper_profile(.:format)  {:action=>"destroy", :controller=>"trooper_profiles"} 

Server日志

Started POST "/troopers/login" for 127.0.0.1 at 2011-05-24 21:11:09 +1000 
Processing by Devise::SessionsController#create as HTML 
Parameters: {"utf8"=>"✓", "authenticity_token"=>"LhT6b4xu5bIJ5kwhS74L7dpaGbuR5BTdirh9AziD+Ew=", "trooper"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign in"} 
Trooper Load (0.6ms) SELECT "troopers".* FROM "troopers" WHERE ("troopers"."email" = '[email protected]') LIMIT 1 
AREL (0.4ms) UPDATE "troopers" SET "last_sign_in_at" = '2011-05-24 11:09:04.931050', "current_sign_in_at" = '2011-05-24 11:11:09.603249', "sign_in_count" = 44, "updated_at" = '2011-05-24 11:11:09.603773' WHERE ("troopers"."id" = 1) 
Completed in 149ms 
ActionController::RoutingError (No route matches {:action=>"create", :controller=>"trooper_profiles"}): 
app/controllers/application_controller.rb:18:in `after_sign_in_path_for' 

为什么路由不匹配任何想法?

回答

3

你没有告诉你的路径帮手其中要显示的步兵配置文件。

尝试从而改变你的after_sign_in_path_for方法:

def after_sign_in_path_for(resource) 
    trooper_trooper_profile_path(resource) # Note presence of 'resource' 
end 
+0

不知道这只是我,但我不得不把这个application_helper.rb,而不是在application_controller。 RB。文档建议放入控制器,但after_sign_in_path_for实际上是帮助器,而不是控制器方法。 – Zee 2011-08-07 00:22:15

0

要重定向到POST操作