代码之家  ›  专栏  ›  技术社区  ›  kubi

将_重定向到and:controller,:操作在Rails中混淆

  •  0
  • kubi  · 技术社区  · 15 年前

    在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 回复  |  直到 15 年前
        1
  •  1
  •   Ron Gejman    15 年前

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

    map.resources :user

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

    但这是不好的,原因有很多——主要是因为它打破了RESTful范式。相反,您应该使用SessionController并使用 sessions/new /login 通过routes.rb中的以下行

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

        2
  •  0
  •   ThoKra    15 年前

    尝试

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

    或者,您可能必须删除路由或编写自己的路由。路线图发布以创建、放置以更新等。

        3
  •  0
  •   JRL    15 年前

    您需要添加 login 在routes.rb中执行操作。提到 this excellent guide

        4
  •  0
  •   kubi    15 年前

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

    以下是my routes.rb文件中的相关位:

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

    谢谢你的帮助。。。