Во-первых, я очень рекомендую прочитать 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
...
Каждой запись подключается к различным полям, и каждое поле соединяет множество различных записей , Это классический пример объединения многих-многих. Логика вашего кода, когда вы на самом деле используете эти модели, - это то, что сделает модель записи похожим на контейнер (поскольку технически вы можете сказать, что поле является контейнером для многих записей).
У каждого поля будет 1 связанный с ним тег, но тот же самый тег можно использовать с любым количеством полей (вы можете сказать, что поля повторно используют теги). Это одна из многих ассоциаций. При создании этого соединения вы должны использовать belongs_to в полевой модели и has_many в модели Tag.
Поскольку тег связан с полевой моделью, логика, которую вы ищете: запись является контейнером для полей и тегов, имеет смысл с этой настройкой.
Вот простой пример извлечения тегов внутри записи:
#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 через командную строку, чтобы быстро настроить свои миграции и модели. Что касается параметров того, как вы хотите, чтобы ваши ассоциации обрабатывали вещи, когда они удалялись, сохранялись и т. Д., Просто прочитайте руководство сверху, чтобы найти то, что вы ищете.
Спасибо Бен. Единственное, что меня путает, это ассоциация HABTM, которую вы настраиваете между моделями Record и Field. Я смущен, потому что думал, что запись может иметь много полей, но каждое заданное поле будет принадлежать только одной записи. Другими словами, когда мы говорим об ассоциациях, мы рассматриваем ассоциации с точки зрения одного экземпляра модели или в целом в перспективе класса каждой модели? (Надеюсь это имеет смысл). – oort
Действительно.Если вы хотите, чтобы поле было уникальным для каждой записи, каждое поле принадлежит _ записи, а запись имеет_значные поля. По какой-то причине я думал, что вы хотите, чтобы каждое поле было возможно подключено к различным записям. Изменение этого никак не повлияет на настройку тега, поскольку они все равно могут быть подключены к множеству разных полей, несмотря на то, что эти поля являются уникальными для записи. Надеюсь это поможет. – Ben