你好,我有一个软件,用户可以在这个软件中有很多项目,在这些项目中,他们可以拥有一个"最喜欢的"项目将在他们登录时加载,如果有的话。
我想让路径为" app.example.io"无论他们是否有喜欢的项目。如果他们没有项目,我希望路径是" app.example.io"但是将它们发送给" projects / index"如果他们确实有一个最喜欢的"项目我希望路径保持不变" app.example.io"但我想将它们发送到特定的项目" projects /:project_id"。
要点是我想要一种方法让网址在登录时始终保持不变,无论他们是否有最喜欢的"项目与否。
constraints subdomain: 'app' do
namespace :users do
devise_for :users, :skip => [:registrations], controller: {passwords: 'passwords', sessions: 'sessions'}, path: '', path_names: {sign_in: 'login', sign_out: 'logout'}
authenticated do
root to: "projects#show", as: :authenticated
end
unauthenticated do
root to: "users/sessions#new", as: :unauthenticated
end
end
devise_scope :user do
root to: "projects#show"
end
这是我的路线文件,我的会话控制器是:
class Users::SessionsController < Devise::SessionsController
layout "login"
def after_sign_in_path_for(resource)
if !current_users_user.project_id
"/projects"
else
"/projects/#{current_users_user.project_id}"
end
end
def after_sign_out_path_for(resource)
"/users/login"
end
end
感谢任何帮助,谢谢!
答案 0 :(得分:0)
您可以尝试以下
"/projects/#{current_users_user.projects[0].project_id}" #=> projects is the table name you can replace which you have
或者您需要尝试验证项目控制器
before_action :authenticate_user!
然后在登录后重定向到项目索引路径,其中当前用户的所有项目只能显示当前用户项目
我认为会有所帮助