2009-12-19 54 views
0

在Rails控制器混错我打电话这样的:redirect_to的和:控制器:动作Rails中

redirect_to :controller => "user", :action => "login" 

user_controller.rb定义了以下方法:

class UserController < ApplicationController 
    def login 
    ### 
    end 

当我打电话给我redirect_to方法我得到了我的浏览器这个错误:No action responded to show.检查服务器日志我看到这一行:

Processing UserController#show (for 127.0.0.1 at 2009-12-19 12:11:53) [GET] 
    Parameters: {"action"=>"show", "id"=>"login", "controller"=>"user"} 

最后,我有这行我routes.rb

map.resources :user 

任何想法,我做错了吗?

回答

1

的黑客-Y答案是你的routes.rb中更改以下行

map.resources :user

map.resources :user, :collection => { :login => :get }

但是,这是不好的原因有多种 - 主要是因为它打破了REST风格。相反,您应该使用SessionController并使用sessions/new登录。你可以将它通过下面的行routes.rb中

map.login 'login', :controller=>"sessions", :action=>"new"

+0

+1,但我不认为这是什么大不了的打破宁静的范例。宇宙包含4个以上的动词。 :-) – MattMcKnight 2009-12-19 18:42:00

+0

我想,我的答案在功能上与此相同。谢谢你的帮助。 – kubi 2009-12-21 12:00:39

0

试图

redirect_to :url => {:action => 'login', :controller => 'user'} 

或者你可能需要删除路由或自己编写。路由映射POST创建,PUT更新等。

0

别名,从而/login我最终什么事做是创建一个新的login_controller来处理登录。

下面是从我的routes.rb文件relavent位:

map.login '/login', :controller => 'login', :action => 'login' 

感谢您的帮助......

相关问题