2016-09-03 9 views
0

私は2種類の機種モデルsellerbuyerを持つeコマースアプリを持っています。私はこれ。だからsubdomainsを使用していない は、私はこれらのそれぞれに異なる工夫ビューを使用しています 機種モデルに基づいて異なるナビゲーションバーを表示

http://localhost:3000/buyers/sign_in 

http://localhost:3000/sellers/sign_in 

のように、各 urlsがどのように見えるかです。しかし、 sellerbuyerに同じ navbarを表示したくありません。 ユーザーが seller pageまたは buyer pageにいるかどうかを確認し、それに基づいてnavbarを表示するにはどうすればよいですか? application.html.erb

私はまずコントローラに基づいてnavbarを表示することを考えましたが、devisはすべてのモデルで同じコントローラとアクションを使用していますので、少し混乱しています。

私はバイヤーと売り手のために異なるビューを使用していますので、各ページ(login、signupなど)から正しいnavbarを表示するために変数や何かをapplication.html.erbに渡すことは可能ですか?

+2

私はcurrent_page?($ path)%> //何かをしないと行きます。<% end %> –

+0

@KevinEtoreありがとうございました。これはうまくいくはずですが、このようなチェック以外の方法はありません。私はすべてのビューをdeviseのようにチェックする必要がありますので、扱いにくいです...名前空間に基づいて表示または非表示にすることができます。 – Abhilash

答えて

2

devise用のカスタムコントローラを生成し、コントローラに基づいてnavbarを表示することができます。このために、最初にあなたの範囲内で発電機を使用してカスタムコントローラを作成します。

rails generate devise:controllers [scope] 

あなたのケースではスコープをすることができますbuyerssellersで。新しいコントローラはapp/controllers/[scope]/に作成されます。

代わりに古いのあなたのroutes.rbでこの行を置き換えます。あなたのケースで

devise_for :[scope], controllers: { 
    sessions: '[scope]/sessions' 
} 

を:

devise_for :sellers, controllers: { 
    sessions: 'sellers/sessions' 
} 

devise_for :buyers, controllers: { 
    sessions: 'buyers/sessions' 
} 

今、あなたはあなたの中にコントローラをチェックすることができる表示し、それに応じてnavbarsを示しました。

+0

ユーザーと呼ばれるモデルはありません。私が持っているのは、売り手と買い手です。どちらも全く異なる考案のモデルです。私は 'rails generate devour Seller'と' rails generate devise buyer'を作成してこれらのモデルを作成しました。この場合、これは機能しますか? – Abhilash

+0

申し訳ありませんが、私はそれを忘れてしまいました。編集された答えをご覧ください。 – Loqman

関連する問題