我认为您找到了解决方案,如果 user_signed_in 然后重定向到 home#dashboard 否则 "home#index",对吗?那么
首先,请参阅此解决方案,该解决方案说 How To: Define a different root route for logged in out users 如果它不起作用,请转到下面。
routes.rb
root to: "home#index", as: :unauthenticated_root
get 'dashboard', to: "home#dashboard" #=> dashboard_path
在您的索引操作上使用如下
def index
redirect_to dashboard_path if user_signed_in?
end
使用这个顶部的控制器
before_action :authenticate_user!, except: [:index]
将设置dashboard和除index以外的其他动作需要认证,你也可以这样使用
before_action :authenticate_user!, only: [:dashboard]
它将被设置为只需要对dashboard 操作进行身份验证。
user_signed_in? 和 authenticate_user! 是回调方法,如果你使用 devise 则默认存在,如果你不使用 devise,我相信你有自己的回调方法,只需替换它。
评论后完全格式化
class HomeController < ApplicationController
before_action :authenticate_user!, except: [:index]
def index
redirect_to dashboard_path if user_signed_in?
end
def dashboard
end
def other_action
end
.....
end
后耙路线
unauthenticated_root GET / home#index
dashboard GET /dashboard(.:format) home#dashboard
Update after comment
如果您有 ajax 登录,请关注此SO question
您应该覆盖设计创建方法并通过正确呈现视图来管理那里的情况,否则,正如您在设计的默认创建方法中看到的那样,如果未执行会话创建,它只会重定向您而无需渲染create.js
您可以覆盖控制器文件夹中的设计控制器并命名为registrations_controller.rb,如下所示
class RegistrationsController < Devise::RegistrationsController
# POST /resource
def create
super
end
end
路线看起来像
devise_for :users, :controllers => {:registrations => 'registrations'}
希望对你有帮助