В моем коде у меня есть модель категории, которая имеет много подкатегорий, и подкатегория принадлежит категории.
Подкатегория имеет поле: position, чтобы отслеживать, какую позицию она должна выстроить в соответствии с категорией.Вот мой код модели для подкатегории.
class Subcategory < ActiveRecord::Base
belongs_to :category
has_many :products
validates_uniqueness_of :position
scope :position, order("position asc")
end
Как вы видите, он не допускает повторяющихся позиций.Когда он обнаруживает, что позиция подкатегории уже существует, я хочу, чтобы он попросил пользователя сказать что-то вроде: «Эта позиция уже занята, но она все еще может быть вставлена. Хотите продолжить?»Да |Нет.
Если да, то мне нужно добавить +1 ко всем текущим категориям подкатегорий: позиция (после позиции "подкатегория в вопросе". Так что если категория 1 имеет подкатегории 1, 2 и 3, когдакто-то пытается добавить новую подкатегорию с позицией 2, мне нужно сбросить текущие 2 и 3 на 3 и 4 и вставить новую подкатегорию в позицию 2.
Если нет, тогда я просто хочу, чтобы она вернулась кэкран редактирования.
Я не уверен, как именно это кодировать, я предполагаю, что проверка: конфликт позиций будет в контроллере подкатегорий, если сохранение не удастся.
Так что мой2 вопроса: где лучше всего поставить чек на этот код, и мне нужна помощь / идеи для написания кода.