2012-04-02 3 views
2

Если у меня есть 3 модели ...Multiple модели и схемы таблицы Рекомендации

Post, Logo_Category и логотип

и 5 столов

сообщений, логотипы, logo_categories, logos_posts и logos_categories_posts

Должность может иметь любое число с логотипом любого количества 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 (идентификатор, logo_id, logo_category_id), logo_categories (ID)

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

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

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

Любые идеи?

+0

Эскиз диаграммы класса. Найдите отношения 1-к-1 или n-к-1, чтобы упростить ваши таблицы. Первый вопрос, который у меня есть, может ли один логотип иметь более одной категории? – Paul

+0

Сообщение может иметь много логотипов и логотипов. В категории логотипа много логотипов. Логотип может содержать только одну категорию. – 3quid

ответ

1

Для вашего стола:

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

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

+0

Чтобы уточнить, вы предполагаете, что вместо двух полностью отдельных таблиц (логотипов и logos_categories) и их присоединения с помощью logos_categories_posts ... Я должен добавить столбец logo_category_id для логотипов, а затем присоединиться к ним с помощью таблицы logos_posts (это будет logos_posts not posts_logos, правильно?) – 3quid

+0

Да, таблица logos_categories_posts не нужна. Поскольку логотипы могут иметь не более одной категории (но категории могут быть сопоставлены с несколькими логотипами), логотипы и категории должны быть связаны с использованием столбца внешнего ключа в таблице логотипов, указывающего на категории. (Неважно, что вы называете таблицей logos_posts). – Paul

+0

Идеально. Спасибо, Пол. Я попытался проголосовать за ваш пост (очень) полезный, но мой представитель не допустит этого! Спасибо за вашу помощь. Я попробую его как можно скорее. – 3quid

Смежные вопросы