Рельсы:принадлежащий кому - либо против has_one
-
23-08-2019 - |
Вопрос
Небольшой вопрос новичка об ассоциациях rails.
У меня есть модель ошибки и модель состояния.Status - это, по сути, просто таблица пар ключ / значение.Из доступных вариантов я бы сказал, что статус Bug has_one имеет наибольший смысл.Однако, согласно это
Содержимое принадлежит элементу ContentTemplate.Вернитесь назад и посмотрите, как я описал проблему , и вы увидите, что это работает.С помощью параметра belongs_to таблица принимает на себя ответственность за внешний ключ.Итак Содержимое имеет content_template_id.И ContentTemplate ничего не нужно.Я могу указать на это по своему желанию.Выполнено.
Статус Bug belongs_to был бы более подходящим (поскольку Bug должен принимать внешний ключ).Семантически его пример имеет смысл, но мой - никакого.Это просто причуда rails, где в данной ситуации это выглядит странно, или я чего-то не понимаю / делаю это неправильно?
Решение
Да, я думаю, вы только что нашли немного странный сценарий в Rails.Я полагаю, было бы полезно рассматривать "статус" как своего рода категорию, к которой относится ошибка — в этом свете это имеет смысл.
Другие советы
TABLE:
Bug
id integer
desc string
status_id integer fk
Status
id integer
desc string
RAILS MODEL:
Bug
belongs_to :status
Status
has_many :bugs
Вы не объяснили точно, какую связь между ошибкой и статусом вы хотели бы получить, но я предполагаю, что вас интересует одно из следующих:
- один ко многим:в этом случае должно быть
has_many
в классе ошибок иbelongs_to
в статусном классе, - один-к-одному:в этом случае должно быть
has_one
в классе ошибок иbelongs_to
в статусном классе.
В обоих случаях Status содержит внешний ключ.Во втором случае формулировка немного странная, из-за того факта, что отношение "один к одному" на самом деле асимметрично (должно быть FK только с одной стороны).
Если Status - это просто таблица поиска / ключ-значение, похоже, вам может понадобиться habtm ( привычка )(has_and_belongs_to_many
) связь между статусом и ошибкой.С habtm то, что вы получите в итоге, - это bugs_statuses
присоединиться к таблице, которая имеет bug_id
и status_id
столбцы вместе с вашими таблицами ошибок и статусов.