Отношения ActiveRecord: могут ли A has_many Bs и A has_one B одновременно? - PullRequest
1 голос
/ 25 августа 2011

У меня есть ситуация, которую я не знаю, как обрабатывать в Rails:

Событие has_many :photos и Фото belongs_to :event

достаточно просто

Но,Событие также должно ссылаться на одну «ключевую» фотографию.

Мысль о добавлении:

Событие has_one :key_photo, :foreign_key => "photo_id"

Но будет ли эта работа с учетом has_many выше?Если это так, то как справиться с инверсией в модели Photo, которая уже говорит: Photo belongs_to :event?

Я мог бы добавить логический столбец к Photo, который имеет значение true только для одной строки («ключевая» фотография), но кажется, чтопустая трата ... если только 1-битный столбец.

Ответы [ 2 ]

0 голосов
/ 25 августа 2011

Я думаю, что самая чистая реализация имеет дополнительный FK в событиях для: key_photo.

# events.rb
belongs_to :key_photo, :class_name => 'Photo'
0 голосов
/ 25 августа 2011

Для чего бы это ни стоило, я бы добавил / использовал однобитовый столбец.Это делает ваш код более выразительным и лучше показывает цель вашего кода.Использование в будущем таких причуд, как «о, это has_one AND has_many», может сбить с толку других разработчиков, таких как вы.

Сначала вы пишете для других разработчиков, а не для компилятора или базы данных.Вернитесь после факта и сделайте его более красивым / элегантным, с профилированием .Вероятность того, что этот бит вызовет проблемы с хранением записей, в лучшем случае минимальна.

...