在Ruby on Rails中定义全局对象的最佳方法

Tom*_*hen 0 ruby model-view-controller ruby-on-rails object

我有一个应用程序,有两个型号类别和产品

产品属于类别.

我创建了一个导航栏下拉列表,要求@category和@product对象在整个应用程序中可用(导航栏显示在应用程序的每个页面上.)

我无法解决的问题是放置这些基本定义的最佳位置,而不是在每个页面定义中多次定义它们.

我需要定义以下内容:

@category = Category.all

@products = @category.products.all
Run Code Online (Sandbox Code Playgroud)

然后导航栏循环看起来像这样.

<% @category.each do |c| %>
  <%= c.name %>
  <% @products.each do |p| %>
    <% link_to product_path(p) do %>
      <%= p.name %>
    <% end %>
  <% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

我是一个铁杆新手,所以我相信这里有一些错误,但任何帮助将不胜感激!

Mar*_*pka 5

如果你需要他们的应用程序的每一个网页,你可以设置他们ApplicationControllerbefore_filter:

class ApplicationController
  before_filter :get_categories

  # ...
  private
  def get_categories
    @categories = Category.includes(:products)
  end
end
Run Code Online (Sandbox Code Playgroud)

那么,你可以写在你的视图中:

<% @categories.each do |category| %>
  <%= category.name %>
  <% category.products.each do |product| %>
    <%= link_to p.name, p %>
  <% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

我还修复了一些其他错误和约定不兼容问题.