8

デバイスユーザーモデルを作成しました。ユーザーには次の 2 種類があります。

  • お客様
  • 管理者

顧客と管理者という 2 つの「通常の」モデルを作成する bij を完了しました。これら 2 つのモデルは、次のようにユーザー モデルから継承しています。

class Customer < User

ユーザーのタイプごとにルートパスを設定する方法を知っている人はいますか? 私はこのようなものが欲しい:

authenticated :customer do
  root :to => "customer/dashboard#index"
end

authenticated :admin do
  root :to => "admin/dashboard#index"
end    

アップデート:

私は問題を解決しました:

root :to => "pages#home", :constraints => lambda { |request|!request.env['warden'].user}
root :to => 'customer/dashboard#index', :constraints => lambda { |request| request.env['warden'].user.type == 'customer' }
root :to => 'admin/dashboard#index', :constraints => lambda { |request| request.env['warden'].user.type == 'admin' }
4

3 に答える 3

7

古い質問ですが、答えはなく、他の人に役立つ可能性があります。

Rails 3.2 (これより低いものでテストしたことはありません) では、routes.rb ファイルでこれを行うことができます。

authenticated :admin_user do
  root :to => "admin_main#index"
end

次に、通常のルート ルートをさらに下に移動します。

ただし、これはRails 4ではうまくいかないようですInvalid route name, already in use: 'root' (ArgumentError)(この質問に出くわしたときに見つけたばかりで解決策を探していたため)、Rails 4でそれを行う方法を見つけたら、私の答えを更新する

編集:

Rails 4の場合、修正は非常に簡単ですが、すぐにはわかりません。次のように as: を追加して、2 番目のルート ルートを名前付きルートにするだけです。

authenticated :admin_user do
  root :to => "admin_main#index", as: :admin_root
end

これはここに文書化されていますが、一時的な修正にすぎないように思われるため、将来再び変更される可能性があることに注意してください

于 2013-06-28T17:37:41.790 に答える
3

あなたができることは、たとえば、単一のルートパスを持ちhome#index、対応するコントローラーアクションでユーザータイプに応じてリダイレクトを実行することです。

例えば:

def index
  if signed_in?
    if current_user.is_a_customer?
      #redirect to customer root
    elsif current_user.is_a_admin?
      #redirect to admin root
    end
  end
end
于 2012-11-06T17:55:37.080 に答える
0

after_sign_in_path_forを使用するのが適切です。だからあなたにこれを追加してくださいapplication_controller.rb

def after_sign_in_path_for(resource)
  if resource.type == 'customer'
    your_desired_customer_path
  else
    your_desired_admin_path
  end
end
于 2013-12-20T14:51:51.437 に答える