У меня есть модель User, которая has_many Documents. Название каждого документа должно быть уникальным в пределах области действия пользователя. Это работает как ожидалось.
class Document < ActiveRecord::Base
has_many :documents, :dependent => :delete_all
end
class Document < ActiveRecord::Base
belongs_to :user
validates_presence_of :title
validates_uniqueness_of :title, :scope => :user_id
end
Когда я клонирую документ, я хочу убедиться, что его заголовок уникален. OSX добавит «copy» к документу, который копируется в Finder. Если имя объекта оканчивается на «copy», к нему добавляется увеличенное числовое значение, начиная с 2 (например, «foo copy 2»). Я хотел бы воспроизвести это поведение.
Кажется, мне нужно сделать следующее в действии копирования ResumeController:
- получить коллекцию документов пользователя
- извлечение заголовков в массив
- поиск в массиве заголовка нового объекта
- если заголовок не найден, сохранить объект
- если заголовок найден (может быть многократным, например, 'foo Copy', 'foo Copy 2'), добавьте 'Copy' в конец заголовка или увеличьте число. Шаблон регулярного выражения 'Copy [0-9] * $', кажется, находит правильное соответствие.
В данный момент логика копирования находится в ResumeController, но, кажется, более уместно добавить ее в модель документа.
Любой совет приветствуется.