【问题标题】:In Rails Routes redirect controller action to root?在 Rails Routes 中,将控制器操作重定向到 root?
【发布时间】:2010-06-28 23:52:19
【问题描述】:

我的路由文件中有根路径:

root 'games#index'

问题是,如果有人访问:http://domain.com/games,它不会显示根目录,因此我们为同一页面创建了两个 url。

有没有办法将任何命中更改为http://domain.com/gameshttp://domain.com

如果路由文件夹中有一个很好的方法,我宁愿不要在应用程序控制器中摆弄before_filter

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby routes


    【解决方案1】:

    最简单的方法是设置重定向。

    map.redirect('/games','/')

    虽然,您的问题实际上是 /games 路由首先不应该在那里。

    删除 routes.rb 文件底部的包罗万象的路由,这甚至不会成为问题。

    【讨论】:

    • Jamie 关于从 routes.rb 中删除路由的建议。然后避免将任何代码链接到/games 路由,您可以使用root_path 辅助方法。
    • 大家好,我有:map.resources :games map.root, :controller => 'games', :action => 'index 事情是,我需要展示,创建,新的, destroy 用于游戏,但索引应该始终是根路径。我尝试了重定向,但我得到了这个错误:没有路由匹配“/”有没有办法映射资源:游戏,但不是索引?
    • 另外,我需要这个的原因不是因为我按说要链接到它,而是我有一个来自不同域的永久重定向,当重定向时,将 URL 作为 domain.com 传递/games 而不是根目录。 if ENV["RAILS_ENV"] != 'development' && request.env['HTTP_HOST'] != CURRENT_DOMAIN request.parameters[:host] = CURRENT_DOMAIN perm_redirect_to url_for(request.parameters) end
    【解决方案2】:

    我在会话方面遇到了同样的问题。我想公开 /sessions 以进行登录和注销,但由于无效的密码会让你留在 /sessions,我想要一种优雅的方式来处理用户以 GET 形式重新提交该 URL(例如,通过键入 Ctrl-L, )。这适用于我在 Rails 3 上:

    resources :sessions, :only => [:new, :create, :destroy]
    match '/sessions' => redirect('/login')
    match '/login', :to => 'sessions#new'
    

    我认为您的代码看起来像这样:

    resources :games, :only => [:new, :edit, :create, :destroy]
    match '/games' => redirect('/')
    

    【讨论】:

    • match '/games' => redirect('/'), :via => :get
    【解决方案3】:

    routes.rb:

      root 'games#index'
    

    在控制器中:

      def index
        redirect_to root_path if request.env['PATH_INFO'] === '/games'
        @games = Game.all
      end
    

    【讨论】:

      【解决方案4】:

      在当前版本的 Rails (3.2.9) 中,这就是我获得相同结果的方式:

      MyApp::Application.routes.draw do
        # ...
        # declare the redirect first so it isn't caught by the default
        # resource routing
        match '/games' => redirect('/')
        # ...
        resources :games
        # ...
        root :to => 'games#index'
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-17
        相关资源
        最近更新 更多