Ruby 有很多是通过多态的

Ruby 有很多是通过多态的,ruby,activerecord,associations,Ruby,Activerecord,Associations,我有一些问题需要正确设置和关联,我在这里查看了所有关于多态关联的问题,但没有一个问题与我的情况相符 以下是一个最低限度的工作测试: require 'rubygems' gem 'activerecord', '3.0.8' require 'active_record' require 'mysql' ActiveRecord::Base.establish_connection( :adapter => 'mysql', :database => 'test_db'

我有一些问题需要正确设置和关联,我在这里查看了所有关于多态关联的问题,但没有一个问题与我的情况相符

以下是一个最低限度的工作测试:

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
有什么方法可以让它作为一个协会发挥作用吗?
现在,我用以下内容替换了用户关联:

def users
  parent.users
end
但很明显,这阻止了我将用户作为标准关联使用:/


编辑:文件夹的父级不能是文件夹本身,在这段代码中,父级只能是站点(在实际代码中它可以是其他东西,但工作方式相同)。

我认为Rails支持的东西不多:通过传递多态关联

在Rails 3.1 rc 1中,我在Rails控制台中得到一个显式异常:

ruby-1.9.2-p180 :011 > p Folder.first.users
  Folder Load (0.1ms)  SELECT "folders".* FROM "folders" LIMIT 1
ActiveRecord::HasManyThroughAssociationPolymorphicThroughError: Cannot have a 
has_many :through association 'Folder#users' which goes through the 
polymorphic association 'Folder#parent'.

我认为Rails的支持并不多:通过多态关联

在Rails 3.1 rc 1中,我在Rails控制台中得到一个显式异常:

ruby-1.9.2-p180 :011 > p Folder.first.users
  Folder Load (0.1ms)  SELECT "folders".* FROM "folders" LIMIT 1
ActiveRecord::HasManyThroughAssociationPolymorphicThroughError: Cannot have a 
has_many :through association 'Folder#users' which goes through the 
polymorphic association 'Folder#parent'.

如果文件夹有一个文件夹作为其父文件夹,是否要返回该父文件夹(将再次查询其父文件夹)的用户?我认为这是不可能的,因为这可能是一个递归查询。文件夹的父文件夹本身不能是文件夹,我更新了问题。如果文件夹的父文件夹是文件夹,是否要返回该父文件夹的用户(这将再次查询其父文件夹)?我认为这是不可能的,因为这可能是一个递归查询。文件夹的父文件夹本身不能是文件夹,我更新了问题。我接受这个答案,因为我怀疑还会有更多的问题出现,我最终在我想使用的大多数时间都撞到了墙。有很多贯穿:/我接受这个答案,因为我怀疑还会有更多的问题出现,我想用的大多数时间都会撞到墙上,有很多种方法:/