我希望users#new
和tasks#index
显示为根路径网址,即/
当用户登录路径users#new
(设置为root)时,它们是重定向到tasks#index
,网址不会更改。可以在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 :(得分:1)
我不确定我是否会这样做,但假设您映射了根任务#index,您还可以使用before filter在用户未登录时呈现会话#new模板:
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 - 在路由中逻辑上不可能对任何路径,root或其他路径有get请求,转到多个控制器/操作。
用户看不到控制器和操作,他们看到操作呈现的结果,通常基于某个模板,并且您可以在操作(或控制器过滤器)逻辑中确定,如上所述
您还可以创建第三个控制器,一个RootController,其中包含显示任务列表的逻辑或基于用户是否登录的登录页面。
答案 1 :(得分: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/