Ruby on rails Rails路由逻辑

Ruby on rails Rails路由逻辑,ruby-on-rails,routes,Ruby On Rails,Routes,将自定义逻辑放在routes.rb中可以吗 例如: unless current_user root :to => anonymous_page else root :to => logged_in_page end 那不是那样的。路由是在服务器启动时读取/创建的,而不是基于每个请求。您必须将此类逻辑放入控制器。您可以将自定义逻辑放入路由。。。但正如复仇者所建议的,“当前用户”将无法工作,因为加载路由文件的时间。我们有时在routefile中使用逻辑(例如设置只有在RAIL

将自定义逻辑放在routes.rb中可以吗

例如:

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

那不是那样的。路由是在服务器启动时读取/创建的,而不是基于每个请求。您必须将此类逻辑放入控制器。

您可以将自定义逻辑放入路由。。。但正如复仇者所建议的,“当前用户”将无法工作,因为加载路由文件的时间。我们有时在routefile中使用逻辑(例如设置只有在RAILS_ENV==“development”时才可用的路由)

您可能需要的是“匿名页面”上的前置过滤器,例如:


你可以用清理宝石来做你想做的事。从许可文件中:

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

这是因为清除将自己添加到中间件堆栈中,使登录状态在路由处理之前可用。

注意:Desive在这里做了一些事情,使神奇发生:
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