Rails路由逻辑

时间:2011-10-25 09:55:28

标签: ruby-on-rails routes

将自定义逻辑放在routes.rb中是否可以?

例如:

unless current_user
  root :to => anonymous_page
else
  root :to => logged_in_page
end

3 个答案:

答案 0 :(得分:2)

这不起作用。在服务器启动时读取/创建路由,而不是基于每个请求。你必须将这种逻辑放入控制器中。

答案 1 :(得分:2)

可以将自定义逻辑放入路由中...但是作为复仇者建议 - 由于加载路由文件时“current_user”将无法工作。我们有时在路径文件中使用逻辑(例如,设置仅在RAILS_ENV =='development'时才可用的路由)。

你可能想要的是“anonymous_page”上的before_filter,例如:

before_filter :redirect_if_logged_in, :only => :anonymous_page

def redirect_if_logged_in
  redirect_to logged_in_page if current_user.present?
end

答案 2 :(得分:0)

你可以使用清除宝石来做你想的。从清关文件:

Blog::Application.routes.draw do
  constraints Clearance::Constraints::SignedIn.new { |user| user.admin? } do
    root to: 'admin'
  end

  constraints Clearance::Constraints::SignedIn.new do
    root to: 'dashboard'
  end

  constraints Clearance::Constraints::SignedOut.new do
    root to: 'marketing'
  end
end

这是有效的,因为clearance将自身添加到中间件堆栈中,在处理路由之前使登录状态可用。