2017-12-22 33 views
1

こんにちは私は、ユーザーが多くのプロジェクトを持つことができるソフトウェアを持っています。それらのプロジェクトでは、ログインするたびにロードされる「好きな」プロジェクトを持つことができます。ダイナミックルートRuby on Rails

好きなプロジェクトがあるかどうかに関係なく、パスを「app.example.io」にしたいと思います。彼らはプロジェクトがない場合、私はパスが "app.example.io"になりたいが、それらを "プロジェクト/インデックス"に送信し、彼らが "好きな"プロジェクトを持っている場合、パスが同じ "app .example.io "しかし私はそれらを特定のプロジェクト" projects /:project_id "に送信したいと思います。

ポイント私は、お気に入りのプロジェクトがあるかどうかにかかわらず、ログインしているときにURLを常に同じにしたいと思っています。

私のルートファイルであり、私のセッションコントローラがある
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)  
    "https://stackoverflow.com/users/login" 
    end 
end 

任意の助けに感謝ありがとうございました!

答えて

0

その後、彼らができる現在のユーザーのすべてのプロジェクトのログイン後のプロジェクトのインデックスパスにリダイレクトあなたは

"/projects/#{current_users_user.projects[0].project_id}" #=> projects is the table name you can replace which you have 

以下のように試すことができます。また、プロジェクトのコントローラに

before_action :authenticate_user! 

を認証しようとする必要があります現在のユーザープロジェクトのみ表示する

私は助けてくれると思います

+0

aveは今働いています。私がしたいことは、 "projects /:project_id"がURLに表示されていないことです – quincosa