В моем коде у меня есть модель категории, которая имеет много подкатегорий, а подкатегория принадлежит категории.
У подкатегории есть поле :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.
Если нет, то я просто хочу, чтобы он вернулся на экран редактирования.
Я не уверен, как именно это закодировать, я предполагаю, что проверка на конфликт :position будет в контроллере подкатегорий, если сохранение не удастся.
Итак, у меня 2 вопроса: где лучше всего поставить чек для этого кода, и мне нужна помощь/идеи для написания кода.