Как реализовать Родительские Категории, Категории и Подкатегории, используя сам ссылающийся контроллер в Rails 4 - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь реализовать трехуровневую глубокую ассоциацию, используя собственные ссылки.

Cat1
    Sub1
        SubSub1
        SubSub2
    Sub2
Cat2
    Sub1
Cat3
    Sub1
    Sub2
        SubSub1

Я могу получить дочернюю категорию категории по этому отношению:

class Category < ActiveRecord::Base
  has_many :sub_categories, class_name: "Category", foreign_key: :parent_id
end

Это хорошо, когда у меня есть только два уровня глубокой категории.Для трехуровневой глубокой ассоциации с использованием самореференции я пытался использовать это отношение, но не смог получить желаемый результат.

class Category < ActiveRecord::Base
  belongs_to :parent_category, class_name: "Category"
  has_many :sub_categories, class_name: "Category", foreign_key: :parent_id
end

вот что я получаю, используя эту ассоциацию. Запрос, запущенный на Category.find(3).parent_category, неверен.

2.0.0-p648 :012 > Category.find(2)
  Category Load (1.2ms)  SELECT `categories`.* FROM `categories` WHERE `categories`.`id` = 2 LIMIT 1
 => #<Category id: 2, title: "Suit", description: "sffdsfsxcx ssdfvvs", seo_name: "sfsdf", parent_id: nil, hoe_page: nil, status: true, sequence: "1", banner_image_file_name: nil, banner_image_content_type: nil, banner_image_file_size: nil, banner_image_updated_at: nil, image_file_name: nil, image_content_type: nil, image_file_size: nil, image_updated_at: nil, home_description: "adhkadaa", home_page: true, long_description: "sdfsddfffssssde", created_at: "2018-04-09 07:42:55", updated_at: "2018-04-09 07:42:55"> 
2.0.0-p648 :013 > Category.find(3)
  Category Load (1.1ms)  SELECT `categories`.* FROM `categories` WHERE `categories`.`id` = 3 LIMIT 1
 => #<Category id: 3, title: "a", description: "aaa", seo_name: "a", parent_id: 2, hoe_page: nil, status: true, sequence: "1", banner_image_file_name: nil, banner_image_content_type: nil, banner_image_file_size: nil, banner_image_updated_at: nil, image_file_name: nil, image_content_type: nil, image_file_size: nil, image_updated_at: nil, home_description: "aaa", home_page: true, long_description: "aaa", created_at: "2018-04-09 09:44:11", updated_at: "2018-04-09 09:44:11"> 
2.0.0-p648 :014 > Category.find(3).parent_category
  Category Load (1.1ms)  SELECT `categories`.* FROM `categories` WHERE `categories`.`id` = 3 LIMIT 1
 => nil 

Пожалуйста, помогите мне здесь, чтобы я понял, что было бы идеальным объединением для моей цели. Пожалуйста, не называйте мне название драгоценного камня, например, "Ancestry" или "awesome_nested_set", мне нужны чистые рельсовые ассоциации.

1 Ответ

0 голосов
/ 16 мая 2018

Попробуйте это:

  belongs_to :parent_category, foreign_key: :parent_id, class_name: 'Category'
  has_many :sub_categories, foreign_key: :parent_id, class_name: 'Category'
...