Итак, у меня есть две модели, Коллекция и Папка.
Внутри каждой Коллекции есть одна корневая папка.Все папки принадлежат Коллекции, но также могут быть вложены друг в друга.
После этого вопроса я написал свои модели, как показано ниже.Я также добавил обратный вызов, потому что я всегда хочу, чтобы коллекция начиналась с корневой папки.
class Folder < ActiveRecord::Base
has_one :master_collection, :class_name => 'Collection', :foreign_key => :root_folder_id
belongs_to :collection
belongs_to :parent, :class_name => 'Folder'
has_many :subfolders, :class_name => 'Folder', :foreign_key => :parent_id
...
end
class Collection < ActiveRecord::Base
belongs_to :root_folder, :class_name => 'Folder'
has_many :folders
after_create :setup_root_folder
private
def setup_root_folder
self.root_folder = Folder.create(:name => 'Collection Root', :collection => self )
end
end
В папках у меня есть столбцы: parent_id, folder_id В коллекциях у меня есть столбец: root_folder_id
Кажется, что это должно работать, но я получаю странное поведение в консоли:
ruby-1.9.2-p0 :001 > c = Collection.create(:name=>"Example")
=> #<Collection id: 6, name: "Example", ...timestamps..., root_folder_id: 8>
ruby-1.9.2-p0 :003 > f = c.root_folder
=> #<Folder id: 8, parent_id: nil, name: "Collection Root", ...timestamps..., collection_id: 6>
ruby-1.9.2-p0 :004 > f.master_collection
=> nil
Итак, очевидно, что ассоциация работает на стороне сбора, но корневая папка не может найтиколлекция, в которой он находится, хотя внешний ключ доступен, и ActiveRecord не вызывает никаких ошибок при использовании ассоциации ...
Есть идеи?