ruby-on-rails - 单独的多态关联表

标签 ruby-on-rails activerecord associations polymorphic-associations has-many-polymorphs

在阅读了Ruby on Rails指南和一些关于多态关联问题的stackoverflow响应后,我了解了它的使用和实现,但是我对特定的使用场景有疑问。我有tags可以与多个topicscategoriesimages和其他各种模型(也具有不同的tags)关联,但是我宁愿创建一个单独的表,而不是将引用字段(foreign_idforeign_type)放在tags表中关联表。仍然可以使用:polymorphic => true吗?

像这样:

create_table :tags do |t|
  t.string :name
  t.remove_timestamps
end

create_table :object_tags, :id => false do |t|
  t.integer :tag_id
  t.references :tagable, :polymorphic => true
  t.remove_timestamps
end

如果无法做到这一点,我计划创建相同的:object_tags表,并在:conditions模型和其他模型中使用Tag强制关联。有办法做到这一点吗?谢谢! (使用Rails 3.0.9和Ruby 1.8.7 <-,因为部署服务器仍在使用1.8.7)

更新:
谢谢德尔巴! Answer是用于HABTM多态性的有效解决方案。
class Tag < ActiveRecord::Base
  has_many :labels
end

class Label < ActiveRecord::Base
  belongs_to :taggable, :polymorphic => true
  belongs_to :tag
end

class Topic < ActiveRecord::Base
  has_many :labels, :as => :taggable
  has_many :tags, :through => :labels
end

create_table :tags, :timestamps => false do |t|
  t.string :name
end

create_table :labels, :timestamps => false, :id => false do |t|
  t.integer :tag_id
  t.references :taggable, :polymorphic => true
end

更新:因为我需要双向HABTM,所以我最后回到了创建单个表的过程。

最佳答案

是的,根据您的描述,标签上始终不会包含可标记的列,因为它们可以包含多个可标记的内容,反之亦然。您提到过HABT,但据我所知,您无法做过has_and_belongs_to,:polymorphic => true之类的事情。

create_table :object_tags, :id => false do |t|
  t.integer :tag_id
  t.integer :tagable_id
  t.string  :tagable_type
end

您的其他表不需要任何用于object_tags,tag或tagable的列。
class Tag < ActiveRecord::Base
  has_many :object_tags
end

class ObjectTag < ActiveRecord::Base
  belongs_to :tagable, :polymorphic => true
  belongs_to :tag
end

class Topic < ActiveRecord::Base
  has_many :object_tags, :as => :tagable
  has_many :tags, :through => :object_tags
end

关于ruby-on-rails - 单独的多态关联表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8422080/

相关文章:

ruby-on-rails - Active Record 创建数据库时出错

ruby-on-rails - 这种弃用方法如何工作?

c# - 必须使用关系流畅的 API 或数据注释显式配置此关联的主体端

ruby-on-rails - text_field rails 的自定义标签?

ruby-on-rails - 我编译的 gem 破坏了我的应用程序,使得所有模型都是未初始化的常量

php - Yii2 与关系 + 加入 2 个表

json - grails,在将域列表呈现为 JSON 时禁用急切获取

mysql - Rails 依赖销毁非关联对象

ruby-on-rails - 如何让 View 更简单, Controller 更有用?

ruby-on-rails - 部分 vs for 循环——最佳实践