- вопрос переписан на основе дальнейшего тестирования -
Итак, мое приложение имеет много папок, которые принадлежат коллекциям.
Папки являются вложенными, они также могут принадлежать_ другой папке.
Я хочу проверить уникальность имен папок в каждой коллекции. Когда я создаю папки на верхнем уровне, это работает, но когда я создаю его на более низких уровнях, это не работает. Вот модели:
class Folder < ActiveRecord::Base
# CALLBACKS
before_create :associate_collection
# RELATIONSHIPS
belongs_to :collection
belongs_to :parent, :class_name => 'Folder'
has_many :subfolders, :class_name => 'Folder', :foreign_key => :parent_id
# VALIDATIONS
validates_presence_of :name
validates_uniqueness_of :name, :scope => :collection_id
private
def associate_collection
if self.collection.nil?
self.collection = self.parent.collection
end
end
end
class Collection < ActiveRecord::Base
# RELATIONSHIPS
has_one :root_folder, :class_name => 'Folder', :conditions => { :parent_id => nil }
has_many :folders
# CALLBACKS
after_create :setup_root_folder
private
def setup_root_folder
self.create_root_folder(:name=>'Collection Root')
self.save!
end
end
Вот сокращенный пример того, что происходит в консоли:
c = Collection.new(:name=>'ExampleCollection')
#<Collection id: 1>
root = c.root_folder
#<Folder id: 1, collection_id: 1>
f1 = root.subfolders.create(:name=>'Test')
#<Folder id: 2 collection_id: 1>
f1.valid?
# TRUE
f2 = root.subfolders.create(:name=>'Test')
#<Folder id: 3 collection_id: 1>
f2.valid?
# FALSE
f1.valid?
# FALSE
Таким образом, хотя коллекция правильно связана с подпапкой, она не запускает проверки корректно до тех пор, пока не будет сохранена.
Предложения