根据设计模型显示不同的导航栏

时间:2016-09-03 10:19:05

标签: ruby-on-rails devise

我有一个电子商务应用,其中包含两个不同的设计模型sellerbuyer。 我没有使用subdomains。这就是每个urls看起来像

的方式
http://localhost:3000/buyers/sign_in

http://localhost:3000/sellers/sign_in

我正在为每个人使用不同的设计视图。但我不想为navbarseller显示相同的buyer。 如何检查用户是否在seller pagebuyer page,并根据application.html.erb显示导航栏?

我首先想到的是显示基于控制器的导航栏,但是设计使用相同的控制器和操作对所有模型都有点困惑。

我对买家和卖家使用不同的观点,因此可以从每个页面(如登录,注册)向application.html.erb传递变量或其他内容以显示正确的导航栏吗?

1 个答案:

答案 0 :(得分:2)

您可以为设计生成自定义控制器,然后根据您的控制器显示导航栏。为此,首先使用范围内的生成器创建自定义控制器:

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'
}

现在,您可以在视图中检查控制器并相应地显示导航栏。