如何在局部视图中访问数据?

时间:2015-12-29 20:18:45

标签: ruby-on-rails

我在如何构建导航菜单时遇到麻烦,取决于模型中的数据。

我首先为静态页面设置控制器。

# Static content

class PagesController < ApplicationController
  def home
  end

  def contact
  end

  def services
  end
end

然后我创建了一些部分,然后设置我的application.html.erb以在每个页面上显示它们。

<body>
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
<%= render "shared/header" %>
<%= render "shared/nav" %>
<%= yield %>
<%= render "shared/footer" %>
</body>
</html> 

现在我需要创建一个导航菜单,客户端可以在其中更改链接,因此我有一个模型可以记录菜单项的名称和slug。

所以现在在我的shared / _nav.html.erb中我需要访问@menus对象。设置类似东西的轨道最佳做法是什么?来自其他MVC架构,我的第一个想法是将控制器链接到导航部分,但我没有看到在rails中做到这一点的方法。有没有办法让我可以在整个应用程序中全局访问我的@menus对象,因为我需要为每个页面使用它?

2 个答案:

答案 0 :(得分:1)

最常用的做法是访问操作视图中的类变量,并将类或其他变量作为局部变量传递给局部视图:

因此,如果nav是您案例中常用的部分,请将本地@menus作为局部变量传递给子视图:

<%= render "shared/nav", menus: @menus %>

navmenus的访问权限而不是@menus

答案 1 :(得分:0)

您可以创建一个非AR ruby​​类,它具有您在控制器中使用回调对其进行初始化所需的所有资源,或者在辅助模块中的变量中初始化它,以便在您需要时可以使用它。