Лучший способ обработки отношений между категориями и подкатегориями Ruby on Rails - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть модель категории и подкатегории. Категория имеет много подкатегорий и подкатегория принадлежит категории. Каждая подкатегория в настоящее время имеет поле позиции для отслеживания того, где она находится в той категории, к которой она принадлежит.

Проблема с тем, как я это делаю, заключается в том, что каждое поле Мне нужно, чтобы поле :position было уникальным для каждой категории. Поэтому вместо использования validates_uniqueness_of :position в моей модели подкатегории мне нужен способ проверить, является ли поле позиции уникальным для его конкретной категории. У кого-нибудь есть какие-либо идеи, или, возможно, решался этот вопрос раньше?

Ответы [ 3 ]

1 голос
/ 14 февраля 2012

Я считаю, что это подтверждает уникальность имени на основе идентификатора пользователя (т. Е. Имя уникально для каждого пользователя):

class Report < ActiveRecord::Base
  validates_uniqueness_of :name, :scope => [:user_id]
end

Простая ассоциация, например has_many и belongs_to, может работать для вас.Если позиция является целым числом, вы можете сделать order_by :position в вашем контроллере с уникальностью этой позиции или без нее.

1 голос
/ 14 февраля 2012

Расширяя ответ на люкапет,

Вложенный набор (https://github.com/skyeagle/nested_set) выглядит примерно так:

- category
+- category 
+- category 
+--- category 
+- category 
- category
+- category 
+- category 
+--- category 
+- category

Вы можете добавить узел к набору в любом месте и связать свой продукт с любой категорией.

Посмотрите в этом файле методы https://github.com/skyeagle/nested_set/blob/master/lib/nested_set/base.rb

В вики для awsome_nested_set могут быть лучшие документы, https://github.com/collectiveidea/awesome_nested_set/wiki/Awesome-nested-set-cheat-sheet

Например, вы можете переместить элемент влево (например, вверх в списке, подобном этому) category.move_left

Чтобы понять эту модель и почему она работает, прочитайте Деревья в SQL от Джо Селко

1 голос
/ 14 февраля 2012

Используйте NestedSet для обработки категорий / подкатегорий и ActsAsList для обработки позиций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...