Ruby on Rails中的隐式表

时间:2009-05-30 09:35:58

标签: ruby-on-rails ruby activerecord

我正在学习如何使用Ruby on Rails编程,我对Ruby on Rails框架为您做多少工作印象深刻。我有以下两个类:

Object
--------
object_id
description

ObjectGroup
--------
group_id 
description

我的想法是我有一些对象,我希望用户能够定义对象组。 Object行和ObjectGroup行都有自己的标识符和关联数据,这些数据基于Web上发布的文档非常直观。我的问题是 - 如何在构成ObjectGroup的对象上存储信息并充分利用Ruby on Rails框架?在SQL中执行此操作的显而易见的方法是使用存储以下格式的条目的第三个表:

ObjectGroupEntry
--------
object_id
group_id

ObjectGroupEntry表中的每个条目表示一个Object,它是ObjectGroup的一部分。我有责任手动创建这个表并教授与Objects和ObjectGroup交互的类如何与它交互?或者Ruby on Rails是否提供了一些我尚未找到的魔法呢?

我可以用自己所知道的方式做到这一点,但我还在学习Ruby on Rails,我想学习正确的方法(TM)来做到这一点。

2 个答案:

答案 0 :(得分:3)

使用Rails,它们都是两者兼而有之。您可以使用具有常规命名约定的迁移(或其他方法)创建表,然后在对象和对象组的模型中放入行:

==Object==
has_and_belongs_to_many :object_groups

==ObjectGroup==
has_and_belongs_to_many :objects

只要您在ObjectObjectGroup表中没有任何额外信息,那么这就是您所需要的。否则你需要一个新的模型,但可以得到相同的行为:

==Object==
has_many :object_object_groups
has_many :object_groups, :through => :object_object_groups

==ObjectObjectGroup==
belongs_to :object
belongs_to :object_group

==ObjectGroup==
has_many :object_object_groups
has_many :objects, :through => :object_object_groups

表示与:through属性的has_many关系,以获得多对多关系,并允许访问关系中的其他信息。

答案 1 :(得分:1)

我认为你会发现它是

has_many :object_object_groups
has_many :objects, :though => :through => :object_object_groups

而不是workmad3所说的。提供的所有其他信息都是正确的,这只是一个语法错误。