2016-03-24 2 views
0

У меня есть вопрос, и я ценю, если кто-нибудь может мне помочь. Я работаю над проектом и должен создавать категории и для каждой категории, подкатегории и снова для каждой подкатегории подкатегория. Это как водопад ... Какое лучшее решение для этого? Нужно ли мне создавать модель для каждого из них и связывать их друг с другом или вы можете предложить лучшее решение?Ruby on Rails Создание категорий и для каждой категории, подкатегории и снова для каждой подкатегории a подкатегория

+0

Также мне нужно создать модель для местоположения, которая может показать страну -> провинция -> город -> город -> область Это как водопад снова! Я не знаю, для чего это лучшее решение? Любой Ruby Gem для этого? – AdamGol

+1

Для категорий можно сделать это только с двумя моделями, использующими взаимосвязь «многие-ко-многим». Для местоположения вы можете просто сделать стол с полями страны, провинции, города и города. Похоже, что вы не знакомы с отношениями Active Record, поэтому вы должны прочитать это: http://guides.rubyonrails.org/association_basics.html – trosborn

+1

попробуйте http://stackoverflow.com/a/14198034/3437900 – illusionist

ответ

0

Пусть попробовать этот gem

Это помогает легко создавать иерархию моделей (например, дерево). Поэтому в вашем случае вы можете использовать этот камень для создания дерева категории. Например:

Category A has Category B, Category C 
Category B has Category B1, Category B2 
and so on! 
1

Я бы сделал это с самонаследованием + полиморфизмом и одной таблицей с несколькими моделями.

, как показано ниже:

Категория Модель:

class Category < ActiveRecord::Base 
    self.inheritance_column = :child_class 
    has_many :disabled_category_business_types 
    has_many :sub_categories, :class_name => 'SubCategory', :foreign_key => :parent_id, :as => :parent 
    belongs_to :parent, :polymorphic => true 

    def all_categories 
    Category.where(:parent_type => 'System') 
    end 

    def all_subcategories 
    Category.where(:child_class => 'SubCategory') 
    end 

    def all_subsubcategories 
    Category.where(:child_class => 'SubSubCategory') 
    end 

    def child_ids 
    return self.sub_category_ids if self.child_class == 'Category' 
    return self.sub_sub_categories if self.child_class == 'SubCategory' 
    end 
end 

SubCategory Модель:

class SubCategory < Category 
    has_many :sub_sub_categories , :class_name => "SubSubCategory" , :as => :parent , :dependent => :destroy 
end 

SubSubCategory [Вы можете изменить название модели, как подходит вам лучше всего.]

class SubSubCategory < Category 
    has_many :items , :class_name => "Item", :foreign_key => :category_id, :dependent => :destroy 
end 

Это решение, которое вы ищите. Надеюсь, это поможет.

Смежные вопросы