Подтвердить что ты не робот

Лучшая практика в отношении empty association_to association

Представьте себе следующую ситуацию:

У меня есть модель dog и модель house. Собака может принадлежать к дому, а в доме может быть много собак, поэтому:

Class Dog <  ActiveRecord::Base
  belongs_to :house
end

Class House < ActiveRecord::Base
  has_many :dogs
end

Теперь представьте, что я также хочу создавать собак, у которых нет дома. Они не принадлежат к дому. Могу ли я использовать эту структуру отношений и просто не сообщать :house_id при ее создании?

Есть ли более эффективная практика?

Обр.: Я использовал эту аналогию для упрощения своей проблемы, но моя реальная ситуация такова: у меня есть модель, которую пользователь может генерировать ее экземпляры. Он также может создавать коллекции этих экземпляров, но он может оставить экземпляр вне коллекции.

4b9b3361

Ответ 1

Я думаю, что это абсолютно нормальный подход.

Вы можете просто оставить house_id с null значением в базе данных для моделей, которые не принадлежат другим.

Ответ 2

Будьте осторожны с этим в 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

from: http://blog.michelada.io/whats-new-in-rails-5