2012-03-26 82 views
1

我想users#newtasks#index显示为根路径URL,即/当用户登录路径users#new上(设置为根),他们将被重定向到tasks#index和URL不更改。这可以在routes.rb文件中完成吗?如何具有多路径的显示网址为根

这是我的routes.rb文件:

Todo::Application.routes.draw do 
    resources :sessions 
    resources :subscriptions 
    resources :users 
    resources :tasks do 
    collection do 
     post :sort 
    end 
    end 
    root :to => "users#new" 
    match "sessions#new" => "tasks#index" 
    match "sessions#" => "tasks#index" 
+0

您可能fighti最佳实践和Rails的方式在这里。 Rails应用程序通常不会像您所描述的那样使用“FrontController”方法来完成。如果你想利用学习资源,宝石等,你可能会尝试使用框架而不是反对它。 – aceofspades 2012-03-27 16:49:36

回答

1

我不知道我会真正做到这一点,但假设你映射了根本任务#索引,你也可以使用过滤器之前呈现会议#新模板时未登录用户:

class TasksController < ApplicationController 

    before_filter :authorize_access 

    def authorize_access 
    unless logged_in? 
     render :template => 'sessions/new' 
     return false #I don't remember if you need this still or not 
    end 
    end 

    def index 
    @tasks = Task.all 
    end 

end 

需要明确的是,当用户请求“/”,Rails会路由这个请求到一个控制器和行动。您可以将多个路径映射到相同的控制器/操作,但是单个路径对于特定的控制器/操作是确定性的。 IOW--在路径上不可能有任何路径,根或其他路径的获取请求,在逻辑上不可能转到多个控制器/动作。

虽然用户看不到控制器和动作,但他们会看到动作呈现的结果,通常基于某个模板,并且您可以在动作(或控制器过滤器)逻辑中确定,就像我一样以上。

您还可以创建一个第三控制器,RootController,包含显示任务列表或登录页面的逻辑,如果用户登录。

+0

Andrew可以工作,如果我这样做了,我会希望'sessions#new'显示为'root' - 'sessions#new'和'tasks#index'显示为'root'而不管路径如何。思考? – 2012-03-26 23:12:11

+0

你的问题是有缺陷的。一个控制器上的一个动作可以被指定为root,这就是路径在rails中的工作方式,但它显示的内容可以是登录页面,也可以是任务列表。以上达到了目的。 – 2012-03-26 23:16:18

+0

另一种考虑这种方式的方法是创建一个HomeController,并将其设置为root用户,这可以委托给会话#new或items#index模板,但不会实际将这些操作映射到他们自己的路由。我的上述解决方案实现了同样的功能,并且如果您从不将自己的会话映射到自己的路由,或者如果用户请求/会话/新会将其重定向到根,那么您会得到您似乎要求的行为。 – 2012-03-26 23:20:02

1

我刚才通过约束发现路线定义

在你的routes.rb文件

class LoggedInConstraint 
    def initialize(value) 
    ... 
    def matches?(request) 
     request.cookies.key?("user_token") == @value 
    end 
    end 
end 

RedmineApp::Application.routes.draw do 
    root :to => "static#home", :constraints => LoggedInConstraint.new(false) 
    root :to => "users#show", :constraints => LoggedInConstraint.new(true) 
    .... 
end 

它的描述如下: http://collectiveidea.com/blog/archives/2011/05/31/user-centric-routing-in-rails-3/