redirect_to和:controller,:在Rails中混淆的动作

时间:2009-12-19 17:37:11

标签: ruby-on-rails

在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

知道我做错了吗?

4 个答案:

答案 0 :(得分:1)

hack-y的答案是更改routes.rb中的以下行

map.resources :user

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

但由于各种原因这很糟糕 - 主要是因为它打破了RESTful范式。相反,您应该使用SessionController并使用sessions/new登录。您可以通过routes.rb

中的以下行将其别名为/login

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

答案 1 :(得分:0)

尝试

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

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

答案 2 :(得分:0)

您需要在routes.rb中添加login操作。请参阅this excellent guide

答案 3 :(得分:0)

我最终做的是创建一个新的login_controller来处理登录。

这是来自我的routes.rb文件的相关位:

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

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