D'abord, je recommande fortement la lecture Guide RoR sur les associations: http://guides.rubyonrails.org/association_basics.html
Que vous soyez nouveau ou besoin d'une touche sur l'utilisation Associations RoR, lisez ce guide.
Votre question semble être plus d'une question de logique, mais je vais commencer par le code pour elle:
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
...
Chaque enregistrement se connecte à de nombreux domaines différents, et chaque champ se connecte à de nombreux enregistrements . Ceci est un exemple classique d'une association de plusieurs à plusieurs. La logique dans votre code lorsque vous utilisez réellement ces modèles est ce qui va faire ressembler le modèle d'enregistrement à un conteneur (car techniquement, vous pourriez dire qu'un champ est un conteneur pour de nombreux enregistrements).
Chaque champ aura 1 balise qui lui est associée, mais ce même balise peut être utilisé avec n'importe quel nombre de champs (vous pouvez dire que les champs sont en réutilisant les balises). C'est une association de un à plusieurs. Lors de cette connexion, vous utiliserez belongs_to dans le modèle Field, et has_many dans le modèle Tag.
Étant donné que Tag est connecté au Field Model, la logique que vous recherchez: Un enregistrement est un conteneur pour les champs et les balises, est logique avec cette configuration.
Voici un exemple simple d'aller chercher une étiquette à l'intérieur d'un enregistrement:
#Returns the Tag Associated with the first field
#"inside" the first Record in the database.
Record.first.fields.first.tag
De même, on peut facilement aller dans le sens inverse:
Tag.first.fields.first.records.first
Assurez-vous de tirer parti des commandes Rails via la ligne de commande pour configurer rapidement vos migrations et vos modèles. En ce qui concerne les options sur la façon dont vous voulez que vos associations gèrent les choses lorsqu'elles sont supprimées, sauvegardées, etc., lisez simplement le guide en haut pour trouver ce que vous cherchez.
Merci Ben. La seule chose qui me rend confus est l'association HABTM que vous installez entre les modèles Record et Field. Je suis confus parce que je pensais qu'un Record peut avoir plusieurs Fields, mais chaque Field donné n'appartiendrait qu'à un seul Record - en d'autres termes quand nous parlons d'associations, voyons-nous des associations à travers la perspective d'une seule instance du modèle ou plus généralement à travers la perspective de la classe de chaque modèle? (J'espère que cela à du sens). – oort
En effet.Si vous voulez qu'un champ soit unique pour chaque enregistrement, alors chaque champ appartient à un enregistrement et un enregistrement contient plusieurs champs. Pour une raison quelconque, je pensais que vous vouliez que chaque champ soit éventuellement connecté à différents records. Changer ceci n'affectera en aucune façon la configuration de Tag, car ils peuvent toujours être connectés à de nombreux champs différents, bien que ces champs soient uniques à un enregistrement. J'espère que cela t'aides. – Ben