На самом деле это зависит от того, что вы собираетесь делать со своими несобранными фотографиями. Если вам нужна возможность показывать несобранные фотографии с помощью того же действия, которое вы используете для показа коллекции, то вам нужна эта общая коллекция. В противном случае я бы оставил это ноль; Мне не нравится смешивать «начальные» данные с пользовательскими данными в одной и той же таблице (что вы будете делать с «несобранной» коллекцией) - слишком легко случайно стереть ваши пользовательские данные при повторном заполнении.
Должны ли это быть отношения HABTM? Опять же, зависит от того, как вы хотите его использовать. Если есть большая вероятность, что фотографии будут принадлежать нескольким коллекциям, сделайте это.
И то, что я видел здесь, упомянуло здесь, что я бы не сделал: добавив атрибут 'ptype', чтобы сообщать синглетам из собранных фотографий (пустое пространство БД - вы уже можете получить эту информацию, вызов photo.collection_id.nil?
); и использование полиморфных моделей (я полагаю, вы не хотите, чтобы одноэлементные фотографии вели себя по-разному, так что это усложняет процесс, принося мало пользы).
Именные области, тем не менее, являются отличной идеей и будут особенно полезны, если у вас нет коллекции «uncollected» для поиска синглетонов по:
#Apologies for the Rails 2.3 code - it's what I know...
named_scope :singletons, {:conditions => {:collection_id => nil}}
Или версия HABTM:
named_scope :singletons, lambda {
{:conditions => ['NOT EXISTS (SELECT * FROM collections_photos WHERE photo_id = ?)', self.id]}
}
Надеюсь, это поможет!