Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.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 什么';中间三重关系模型的设计好吗?_Ruby On Rails_Database Design_Data Modeling_Modeling - Fatal编程技术网

Ruby on rails 什么';中间三重关系模型的设计好吗?

Ruby on rails 什么';中间三重关系模型的设计好吗?,ruby-on-rails,database-design,data-modeling,modeling,Ruby On Rails,Database Design,Data Modeling,Modeling,我是Rails新手,还没有掌握所有与Rails关联的可能性。我的问题是: 我有两种型号,像苹果和柠檬。 然后是“关系”模型,它包含三重关系: 主体|关系|客体 苹果比柠檬甜 “关系”的迁移是这样的: 这应该像这样存储关系 受试者id=1 主题类型=苹果 关系=比…更甜蜜 对象id=2 对象类型=柠檬 实际上,我不止有两个模型,所以我认为我需要使用多态选项使主题和对象列模型不可知 您将如何设置apple、lemon和relation模型类中的关联?这种关系的桌子设计好吗 非常感谢你的帮助 -Ale

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

我有两种型号,像苹果和柠檬。 然后是“关系”模型,它包含三重关系:

主体|关系|客体

苹果比柠檬甜

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

这应该像这样存储关系

受试者id=1

主题类型=苹果

关系=比…更甜蜜

对象id=2

对象类型=柠檬

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

您将如何设置apple、lemon和relation模型类中的关联?这种关系的桌子设计好吗

非常感谢你的帮助


-Alex

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

class Relation < ActiveRecord::Base
  belongs_to :object, :polymorphic => true
  belongs_to :subject, :polymorphic => true
end
类关系true
属于:subject,:多态=>true
结束
你的其他课程是这样的

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
苹果类
classapple'relations',:as=>:object
有很多:主题关系,:类名称=>'relations',:as=>:subject
结束
类Orange'relations',:as=>:object
有很多:主题关系,:类名称=>'relations',:as=>:subject
结束
多态性是一种痛苦:

除非您非常需要它,否则请使用SingleTableInheritation之类的工具:

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水果:relation,:class\u name=>'Fruit'
有很多:相关的主题,:通过=>:relation,:class\u name=>'relation'
结束
类关系'Fruit'
属于:主题,:类=>“水果”
验证是否存在:对象id
验证是否存在:受试者id
验证是否存在:关系
结束
然后就像:

class Apple < Fruit
   ...
end
苹果类水果 ... 结束
我希望这有帮助,(我没有测试这段代码)

太棒了,这是我需要的80%=>好的!(我的描述相当简单,真实情况更复杂)tha hanx!
class Apple < Fruit
   ...
end