Советы по нескольким моделям и схемам таблиц - PullRequest
2 голосов
/ 03 апреля 2012

Если у меня есть 3 модели ...

Post, Logo_Category и Logo

и 5 таблиц

сообщений, логотипов, логотипов_категорий, логотипов_постов и логотипов_категорий_постов

В сообщении может быть любое количество логотипов из любого числа logo_categories. Я начал с HABTM, но думаю, что выбрал неправильный путь с точки зрения моей схемы.

Кто-нибудь знает, как лучше связать эти модели?

Приветствия

EDIT

Извините, ребята, я думал, что решил эту проблему, но ...

В соответствии с тем, что предложил Павел, я изменил свои ассоциации на следующие.

POST.erb

has_and_belongs_to_many :logos
has_many :logo_categories, :through => :logos  

LOGO.erb

  belongs_to :logo_category
  has_and_belongs_to_many :posts

LOGO_CATEGORY.erb

has_many :logos
has_and_belongs_to_many :posts

и мои столы сейчас ...

сообщений (id), логотипов (id), logos_posts (id, logo_id, logo_category_id), logo_categories (id)

Мой пост _form загружается нормально, и все логотипы и logo_categories загружаются с правильными значениями и проверяются / не проверяются (при редактировании сообщения) правильно.

Я могу проверить новый логотип или снять существующий, и это нормально. Однако, если я изменю logo_category, я получаю следующую ошибку!

Невозможно изменить ассоциацию 'Post # logo_categories', потому что она идет через несколько других ассоциаций.

Есть идеи?

1 Ответ

1 голос
/ 03 апреля 2012

Для вашей таблицы:

[posts] 1--n [post_logos] n--1 [logo] n--1 [logo_category]
  • Каждое сообщение имеет одну строку в таблице сообщений с уникальным post_id
  • Каждый логотип имеет одну строку в таблице логотипов с уникальным logo_id
  • Каждая строка таблицы логотипов связана с одной строкой logo_category
  • Каждый раз, когда логотип связывается с сообщением, в таблице post_logos создается строка.Он имеет два столбца с внешним ключом: post_id и logo_id.

В ruby ​​каждый объект Post может иметь массив или список объектов логотипа.Каждый объект Logo составляет один объект Logo_Category (имеет одного члена или переменную Logo_Category).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...