Ответ 1
Я думаю, что это абсолютно нормальный подход.
Вы можете просто оставить house_id
с null
значением в базе данных для моделей, которые не принадлежат другим.
Представьте себе следующую ситуацию:
У меня есть модель dog
и модель house
. Собака может принадлежать к дому, а в доме может быть много собак, поэтому:
Class Dog < ActiveRecord::Base
belongs_to :house
end
Class House < ActiveRecord::Base
has_many :dogs
end
Теперь представьте, что я также хочу создавать собак, у которых нет дома. Они не принадлежат к дому. Могу ли я использовать эту структуру отношений и просто не сообщать :house_id
при ее создании?
Есть ли более эффективная практика?
Обр.: Я использовал эту аналогию для упрощения своей проблемы, но моя реальная ситуация такова: у меня есть модель, которую пользователь может генерировать ее экземпляры. Он также может создавать коллекции этих экземпляров, но он может оставить экземпляр вне коллекции.
Я думаю, что это абсолютно нормальный подход.
Вы можете просто оставить house_id
с null
значением в базе данных для моделей, которые не принадлежат другим.
Будьте осторожны с этим в Rails 5...
belongs_to требуется по умолчанию
Отныне каждое приложение Rails будет иметь новую конфигурацию option config.active_record.belongs_to_required_by_default = true, это приведет к ошибке проверки при попытке сохранить модель, где belongs_to ассоциаций нет.
config.active_record.belongs_to_required_by_default можно изменить на false, и при этом сохраняется поведение старых Rails или мы можем отключить эту валидация по каждому свойству belongs_to, просто передавая дополнительный option optional: true следующим образом:
class Book < ActiveRecord::Base belongs_to :author, optional: true end