Rails导航栏取决于用户状态和路径

时间:2013-08-21 08:58:40

标签: ruby-on-rails

我正在寻找一个好的模式,让导航栏取决于用户状态和当前路径。

在我们的应用程序中,我们有一个导航栏,显示登录用户的用户特定选项(我的个人资料,我的工作......等)和访客用户的访客特定选项(如何工作,成为会员,。 ..等等)。

现在我们还有一个演示用户,当他在路径子集上时,应该显示用户特定的选项,当他在不同路径时,应该显示特定于客户的选项。

我目前的解决方案是存储在数组中的白名单和检查当前路径是否在数组中的函数。

ALLOWED_FOR_DEMO = ['profile', 'demo_jobs', 'jobs']

def allowed_for_demo?
  ALLOWED_FOR_DEMO.each { |path|
    return true if request.path.include? path
  }
  return false
end

然后在标题视图中检查。

<% if allowed_for_demo? %>
  <div class="navbar">
    <div class="navbar-inner">
      <div class="container">
      </div>
    </div>
  </div>
<% end %>

如果你问我这个模式非常糟糕,所以如果有人有更好的模式,那将非常感激。

2 个答案:

答案 0 :(得分:0)

更好的是你可以试试这个。至少它会在找到第一个元素后立即返回。

def allowed_for_demo?
  ALLOWED_FOR_DEMO.any? { |path|
    request.path.include? path
  }
end

答案 1 :(得分:0)

ALLOWED_FOR_DEMO是全局变量吗? 如果你把它放在帮助器中,你可以定义两个方法,一个用于弹出数组,另一个用于检查它是否允许进行演示。

class AllowedDemoHelper
  def set_allowed_demo_path(path)
    @allowed_demo_path = path
  end

  def allowed_for_demo?
   (@allowed_demo_path || []).any? do |path|
     request.path.include? path
   end
  end
end

您也可以将它放在ApplicationController中,但我认为帮助方法更好。