在rails 4中创建关系(一个模型可以属于多个其他模型)

时间:2013-12-18 17:54:24

标签: ruby-on-rails

我正在尝试在Rails 4中建模链接和节点。链接可以有两个节点(源节点和目标节点)。节点可以属于多个链接。我在我的链接模型中写了这个。

class Links < ActiveRecord::Base
  has_one :source_node, class_name: 'Node'
  has_one :target_node, class_name: 'Node'

end

我为我的节点类写了这个。这是对的吗?

class Nodes < ActiveRecord::Base
  belongs_to :link


end

1 个答案:

答案 0 :(得分:1)

  • SN - 源节点
  • TN - 目标节点
  • L - link

链接的用例:

SN - L - TN
SN - L
     L - TN
     L

一个链接有一个源节点。

一个链接有一个目标节点。

节点的用例:

     L3  
      |
L1 - SN - L2
      |
     L4

一个节点有很多链接。

所以:

class Links < ActiveRecord::Base
  belongs_to :source_node, class_name: 'Node' // didn't use has_one*
  belongs_to :target_node, class_name: 'Node'
end

class Nodes < ActiveRecord::Base
  has_many :links
end

使用 belongs_to 而不是 has_one 的原因是因为Link将拥有Node的外键。

如果以相反的方式定义关系怎么办?其中Node具有外键(belongs_to)和每种类型节点的Link(has_one)。使用该设计,您需要为Node模型中的N个链接定义字段link_N_id

问题是:

  • 您必须手动为N个链接添加N个字段。
  • 每个节点的关系限制为最多N.