首先,我强烈推荐阅读 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 命令来快速设置迁移和模型。至于您希望关联在删除、保存等时如何处理的选项,只需阅读顶部的指南即可找到您要查找的内容。