将自定义逻辑放在routes.rb中是否可以?
例如:
unless current_user
root :to => anonymous_page
else
root :to => logged_in_page
end
答案 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将自身添加到中间件堆栈中,在处理路由之前使登录状态可用。