【问题标题】:How to access data in a partial view?如何访问局部视图中的数据?
【发布时间】:2015-12-29 20:18:44
【问题描述】:

我在如何根据模型中的数据构建导航菜单时遇到问题。

我首先为我的静态页面设置了一个控制器。

# 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 对象。设置这样的东西的rails最佳实践是什么?来自其他 MVC 架构,我的第一个想法是将控制器链接到导航部分,但我没有看到在 Rails 中这样做的方法。有没有一种方法可以让我的 @menus 对象在整个应用程序中全局可访问,因为每个页面都需要它?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

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

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

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

    nav 中对menus 的访问权限不是@menus

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-25
        • 1970-01-01
        相关资源
        最近更新 更多