Ruby on rails RubyonRails中的隐式表

Ruby on rails RubyonRails中的隐式表,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我正在学习如何使用RubyonRails编程,RubyonRails框架为您做了大量工作,这给我留下了深刻的印象。我有以下两门课: Object -------- object_id description ObjectGroup -------- group_id description 我的想法是我有一些对象,我希望用户能够定义对象组。对象行和对象组行都有自己的标识符和关联的数据,基于web上发布的文档,这是非常直观的。我的问题是——如何存储组成ObjectGroup的对象的信息并充分

我正在学习如何使用RubyonRails编程,RubyonRails框架为您做了大量工作,这给我留下了深刻的印象。我有以下两门课:

Object
--------
object_id
description

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

ObjectGroupEntry
--------
object_id
group_id
ObjectGroupEntry表中的每个条目表示作为ObjectGroup一部分的对象。我是否有责任手动创建此表,并教与对象和对象组交互的类如何与之交互?或者RubyonRails提供了一些我还没有发现的魔法来实现这一点


我可以用我所知道的自己来做这件事,但我仍在学习RubyonRails,我想学习正确的方法(TM)来做这件事。

使用Rails,两者都有一点。使用具有正常命名约定的迁移(或其他方法)创建表,然后在对象和对象组的模型中放入以下行:

==Object==
has_and_belongs_to_many :object_groups

==ObjectGroup==
has_and_belongs_to_many :objects
只要ObjectGroup表中没有任何额外的信息,这就是您所需要的。否则,您将需要一个新模型,但可能会得到如下相同的行为:

==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属性具有多对多关系,以获得多对多关系,并允许访问该关系的其他信息。

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

==Object==
has_and_belongs_to_many :object_groups

==ObjectGroup==
has_and_belongs_to_many :objects
只要ObjectGroup表中没有任何额外的信息,这就是您所需要的。否则,您将需要一个新模型,但可能会得到如下相同的行为:

==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

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

我想您会发现它是

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

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

我想您会发现它是正确的

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

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

正常的命名约定是什么?能否将ObjectGroup重新命名为ObjectGroupList?对不起,我很容易混淆。:)用于命名约定。您可以提供自己的表和模型等,并覆盖约定,但这(有意地)比一开始就遵循约定要做更多的工作,而且我从来没有想过如何做到这一点:)正常的命名约定是什么?能否将ObjectGroup重新命名为ObjectGroupList?对不起,我很容易混淆。:)用于命名约定。您可以提供自己的表和模型等,并覆盖约定,但这(有意地)比首先遵循约定要做更多的工作,而且我从来没有想过如何做到这一点:)请注意,实际创建名为Object的类可能不是一个好主意。这可能会产生相当大的影响…同意,这只是一个例子。请注意,实际上创建一个名为Object的类可能不是一个好主意。这可能会产生相当大的影响…同意,这只是一个例子。