У меня есть некоторые проблемы с правильной настройкой и ассоциацией, я просмотрел все вопросы о полиморфной ассоциации, но ни один из них не соответствует моему случаю.
Вот минимальный рабочий тест:
require 'rubygems'
gem 'activerecord', '3.0.8'
require 'active_record'
require 'mysql'
ActiveRecord::Base.establish_connection(
:adapter => 'mysql',
:database => 'test_db',
:user => 'root'
)
class User < ActiveRecord::Base
belongs_to :site
end
class Site < ActiveRecord::Base
has_many :folders, :as => :parent
has_many :users
end
class Folder < ActiveRecord::Base
belongs_to :parent, :polymorphic => true
has_many :users, :through => :parent
end
p Folder.first.users
# => NameError: uninitialized constant Folder::Parent
А вот моя схема:
# inimal database schema :
#
# create_table :sites do |t|
# t.string :name, :null => false
# end
#
# create_table :users do |t|
# t.string :login, :null => false
# t.integer :site_id, :null => false
# end
#
# create_table :folders do |t|
# t.string :label, :null => false
# t.string :parent_type, :null => false
# t.integer :parent_id, :null => false
# end
Есть ли способ заставить это работать как ассоциация?
А пока я заменил ассоциацию пользователей на:
def users
parent.users
end
но, очевидно, это мешает мне использовать пользователей в качестве стандартной ассоциации: /
Редактировать: родительский элемент папки не может быть самой папкой, в этом коде родительский элемент может быть только сайтом (в реальном коде это могут быть некоторые другие вещи, но он работает так же).