Rails子类别

时间:2015-10-19 08:18:50

标签: ruby-on-rails categories

如何查找和管理子类别? (我定义的find_subcategory方法似乎不起作用。)

for value in peq.itervalues():
    print value['code']

我正在使用acts_as_tree gem,它有:

for key, value in peq.iteritems():
    print value['code']

2 个答案:

答案 0 :(得分:2)

您还不清楚您希望find_subcategory方法做什么,但是如果您希望它找到id为params [:id]的类别的所有子类别,则将其更改为

def find_subcategories
  @subcategories = Category.where(:parent_id => params[:parent_id]).all
end

在您的原创作品中,您只需要查找单个子类别,如果您只想要一个类别,那么您也可以从它的ID中加载它。

答案 1 :(得分:2)

我知道你接受了答案,但是I've done this before因此解释我们是如何做到的可能是有益的:

首先,我们使用了祖先宝石。 我认为acts_as_tree已被弃用 - acts_as_tree优于ancestry,我忘记了为什么我们现在使用它 - ancestry非常类似的方式(parent列,child方法等。)

我将使用ancestry解释我们的实施情况 - 希望它能为您提供acts_as_tree的一些想法:

#app/models/category.rb
class Category < ActiveRecord::Base
   has_ancestry #-> enables the ancestry gem (in your case it should be "acts_as_tree"
end

这样您就可以填充ancestry模型中的parent_id(在您的案例中为categories)列,并且(最重要的)您可以call the child methods附加到模型中的对象:

@category.parent
@category.children

......等等。

-

这里要注意的重要事项是我们如何能够调用child对象(在您的情况下将是子类别)。

您的方法是创建单独的对象并让它们相互继承。 ancestry / acts_as_tree的美妙之处在于它们的附加方法。

任何具有正确parent ID的对象都可以将其“子”称为关联数据:

enter image description here

在我们的案例中,我们能够使用ancetry列关联所有对象。这比acts_as_tree稍微复杂一些,因为你必须在列中提供整个层次结构(这是蹩脚的),但结果仍然是相同的:

#app/controllers/categories_controller.rb
class CategoriesController < ApplicationController
   def index
      @categories = Category.all
   end
end

#app/views/categories/index.html.erb
<%= render @categories %>

#app/views/categories/_category.html.erb
<%= category.name %>
<%= render category.children if category.has_children? %>

这将为您输出子类别:

enter image description here

  

如何查找和管理子类别

你可以这样做:

@subcategories = Category.where parent_id: @category.id

如果您的祖先设置正确,您应该能够使用以下内容:

#config/routes.rb
resources :categories

#app/controllers/categories_controller.rb
class CategoriesController < ApplicationController
   def show
      @category = Category.find params[:id]
   end
end

这将允许您使用:

#app/views/categories/show.html.erb
<% @category.children.each do |subcategory| %>
   <%= subcategory.name %>
<% end %>

enter image description here