0

我是 Rails 的新手,还没有掌握关联的所有可能性。这是我的问题:

我有几个模型,比如苹果和柠檬。然后是包含三元关系的模型“关系”:

主题 | 关系 | 目的

苹果| 高分辨率照片| CLIPARTO 比| 更甜 柠檬

“关系”的迁移是这样的:

create_table :relations do |t|
  t.references :subject,  :polymorphic => true
  t.string     :relation
  t.references :object,   :polymorphic => true
  t.timestamps    
end

这应该存储关系

主题 ID = 1

主题类型 = 苹果

关系 = 比

object_id = 2

object_type = 柠檬

实际上,我有不止 2 个模型,所以我认为我需要通过使用多态选项使主题和对象列模型不可知。

你将如何设置苹果、柠檬和关系模型类中的关联?这样的关系表设计好不好?

非常感谢你的帮助!!

-亚历克斯

4

2 回答 2

1

给出您描述的 db 模式,看起来应该相当简单:

class Relation < ActiveRecord::Base
  belongs_to :object, :polymorphic => true
  belongs_to :subject, :polymorphic => true
end

你的其他课程看起来像这样

class Apple < ActiveRecord::Base
  has_many :object_relations, :class_name => 'Relation', :as => :object
  has_many :subject_relations, :class_name => 'Relation', :as => :subject
end

class Orange < ActiveRecord::Base
  has_many :object_relations, :class_name => 'Relation', :as => :object
  has_many :subject_relations, :class_name => 'Relation', :as => :subject
end
于 2009-05-07T23:20:34.203 回答
0

多态是痛苦:

除非您非常需要它,否则请使用 SingleTableInheritance 之类的东西:

class Fruit < ActiveRecord::Base
   has_many :relations
   has_many :related_objects, :through => :relation, :class_name => 'Fruit'
   has_many :relating_subjects, :through => :relation, :class_name => 'Relation'
end
class Relation < ActiveRecord::Base
   belongs_to :object, :class => 'Fruit'
   belongs_to :subject, , :class => 'Fruit'
   validate_presence_of :object_id
   validate_presence_of :subject_id
   validate_presence_of :relation
end

然后像:

class Apple < Fruit
   ...
end

我希望有帮助,(我没有测试过这段代码)

于 2009-05-08T09:10:25.300 回答