Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails :多态/:通过ActiveRecord关联(Rails 3.2)_Ruby On Rails_Ruby On Rails 3_Activerecord_Has Many_Polymorphic Associations - Fatal编程技术网

Ruby on rails :多态/:通过ActiveRecord关联(Rails 3.2)

Ruby on rails :多态/:通过ActiveRecord关联(Rails 3.2),ruby-on-rails,ruby-on-rails-3,activerecord,has-many,polymorphic-associations,Ruby On Rails,Ruby On Rails 3,Activerecord,Has Many,Polymorphic Associations,我有一个标签系统,可以应用于各种标签。我希望能够透明地查询它们,就像在这里接受的解决方案中一样: 例如,我想说,给我看所有贴有“foo”标签的帖子、页面、视频等。非常严格。并发症: 不同类型的标记在OO意义上不是多态的,只是通过多态关联。有一个taggables表来保证帖子中主键的taggable_id的唯一性,等等。。 毫不奇怪,标记与Taggables有多对多的关系,并通过map_Tags表进行关联。 型号: class Tag < ActiveRecord::Base has_m

我有一个标签系统,可以应用于各种标签。我希望能够透明地查询它们,就像在这里接受的解决方案中一样:

例如,我想说,给我看所有贴有“foo”标签的帖子、页面、视频等。非常严格。并发症:

不同类型的标记在OO意义上不是多态的,只是通过多态关联。有一个taggables表来保证帖子中主键的taggable_id的唯一性,等等。。 毫不奇怪,标记与Taggables有多对多的关系,并通过map_Tags表进行关联。 型号:

class Tag < ActiveRecord::Base
  has_many :map_tags
  has_many :tagged, :through => :map_tags
end

class MapTag < ActiveRecord::Base    
  belongs_to :tags
  belongs_to :tagged, :polymorphic => :true
end

class Post < ActiveRecord::Base
  has_many :map_tags, :as => :tagged 
  has_many :tags, :through => :map_tags
  # other taggables are set up similarly
end
编辑

我发现,这指出我需要指定:source和:source\u类型。因此:

我想我更接近了,但我仍然不确定如何查询关联的对象

irb> Tag.first.posts
  Tag Load (0.2ms)  SELECT `tags`.* FROM `tags` LIMIT 1
NoMethodError: undefined method `posts' for #<Tag id: 1, name: "foo">
irb> Tag.first.tagged
  Tag Load (0.2ms)  SELECT `tags`.* FROM `tags` LIMIT 1
ActiveRecord::HasManyThroughAssociationPolymorphicSourceError:
Cannot have a has_many :through association 'Tag#tagged' on the polymorphic object 'Tagged#tagged'.

您的多态关联设置是正确的。除了一个小的打字错误:

belongs_to :tagged, :polymorphic => :true

布尔值应该为true,而不是:符号为true

您的多态关联设置是正确的。除了一个小的打字错误:

belongs_to :tagged, :polymorphic => :true

布尔值应该为true,而不是:符号为true

愚蠢但你重新加载了控制台吗?我有一个类似的多态关系,并且有很多设置是正确的?我确实重新加载了控制台,并且得到了相同的错误。愚蠢但你重新加载了控制台吗?我有一个类似的多态关系,并且有很多设置是正确的?我确实重新加载了控制台,并且得到了相同的错误。
belongs_to :tagged, :polymorphic => :true