繁体   English   中英

包含模型,必须属于其他2个模型

[英]model include, must belong to 2 other models

这确实让我烦恼-似乎无法通过包含等建立正确的关联。 这是有问题的模型:

class Category < ActiveRecord::Base
 has_many :subcategories
 has_many :locations, :through => :subcategories
end
class Location < ActiveRecord::Base
 has_many :subcategories
 has_many :category, :through => :subcategories
end
class Subcategory < ActiveRecord::Base
 belongs_to :category
 belongs_to :location
end

我需要以以下结构输出:

Category.name
 Location.name
  Subcategory.name
  Subcategory.name
  Subcategory.name
       (subcategory from another sub category)

控制器:

 class SubcategoriesController < ApplicationController
    def index
      @categories = Category.all(:include => [:locations => :subcategories], :group
      =>"subcategories.name")
    end

视图:

 <div class="categorylist">
  <ul>
     <%= @categories.each do |category|%>
    <h3>
        <%=h link_to category.name, category %>
    </h3>
    <%= category.locations.each do |location|%>
    <h6>
        <%= link_to location.name, location %>
    </h6>
        <%= location.subcategories.each do |subcategory|%>
        <p>
        <%= link_to subcategory.name, subcategory%>
        </p>
        <% end %>   
    <% end %>
   <% end %>    
  </ul> 
 </div>

我想要的是:

 Fruit
  France
    apple
      granny smith
    fig
  India
    pineapple
    banana
 Meat
   India 
     cow
     chicken
     -------------
What I am currently getting:
Fruit
  India
    cow 
    chicken
    banana
    pineapple

这意味着我仅根据位置而不是位置和类别来获取子类别。

当我到达子类别级别时,出现了我的问题,其中子类别应同时取决于类别和位置-它们似乎只属于其他模型中的一种,但是在我的情况下,它们必须属于两者。 我似乎无法正确理解。 我尝试了很多方法来做到这一点,甚至不确定即时消息是否正确。

希望有人能指出正确的方向。

在此先感谢克里斯蒂安

如果我正确理解您的问题,您会遇到类似

#Category
Fruit
 Apple
 Banana
Vegetable
 Lettuce

#Location
France
 Apple
 Lettuce
India
 Banana

现在,您想要类似

#Hierachical output
Fruit
 France
  Apple
 Vegetable
  Lettuce
India
 Fruit
  Banana

在那种情况下,这样行不通=> location.subcategories.where(category_id: category.id).each吗?

编辑

也许,这可能有效(除了上述更改之外):

<%= category.locations.all(include: sub_categories).each do |location|%>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM