2012-03-26 59 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/