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