0

我有一个记录模型,我想创建一个字段模型,以便给定记录has_many字段。同样,我希望每个字段都与一个标签相关联,这样每个字段has_one标签。但是每个 Tag 可以在 Field 对象之间重复使用很多次。

在这种情况下,我会说一个标签belongs_to_many字段吗?同样,是否可以说实地belongs_to_many记录?

(最终我希望 Record 对象成为多个 Fields 的容器。我设想有一个表单,我可以在其中动态添加新的 Field 和 Tag,这样 Record 可能看起来像:

Record 1
    Tag 1
    Field 1
    Tag 2
    Field 2
    ...

每个标签可以从预先存在的池中提取或动态创建)感谢您的帮助!

4

1 回答 1

0

首先,我强烈推荐阅读 RoR 协会指南:http: //guides.rubyonrails.org/association_basics.html

无论您是新手还是需要了解如何在 RoR 中使用关联,请阅读该指南。

您的问题似乎更像是一个逻辑问题,但我将从代码开始:

class Record < ActiveRecord::Base
   has_and_belongs_to_many :fields
...

class Field < ActiveRecord:Base
   has_and_belongs_to_many :records
   belongs_to :tag
...

class Tag < ActiveRecord:Base
   has_many :fields
...

每个记录连接到许多不同的字段,每个字段连接到许多不同的记录。这是多对多关联的经典示例。当您实际使用这些模型时,代码中的逻辑会使 Record Model 看起来像一个容器(因为从技术上讲,您可以说 Field 是许多记录的容器)。

每个字段将有 1 个与之关联的标签,但同一标签可用于任意数量的字段(您可以说字段正在重用标签)。这是一个一对多的关联。建立此连接时,您将在 Field 模型中使用 belongs_to,在 Tag 模型中使用 has_many。

由于标签已连接到字段模型,因此您正在寻找的逻辑:记录是字段和标签的容器,对于此设置是有意义的。

这是一个在记录中获取标签的简单示例:

#Returns the Tag Associated with the first field
#"inside" the first Record in the database.

Record.first.fields.first.tag

同样,人们可以很容易地走向相反的方向:

Tag.first.fields.first.records.first


确保通过命令行利用 Rails 命令来快速设置迁移和模型。至于您希望关联在删除、保存等时如何处理的选项,只需阅读顶部的指南即可找到您要查找的内容。

于 2012-05-23T20:44:05.573 回答