动态根Ruby on Rails

时间:2017-12-22 16:51:38

标签: ruby-on-rails ruby

你好,我有一个软件,用户可以在这个软件中有很多项目,在这些项目中,他们可以拥有一个"最喜欢的"项目将在他们登录时加载,如果有的话。

我想让路径为" 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

感谢任何帮助,谢谢!

1 个答案:

答案 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!

然后在登录后重定向到项目索引路径,其中当前用户的所有项目只能显示当前用户项目

我认为会有所帮助