web-dev-qa-db-fra.com

Meilleure pratique concernant l'association vide Appartient à

Imaginez la situation suivante:

J'ai un modèle dog et un modèle house. Un chien peut appartenir à une maison, et une maison peut avoir plusieurs chiens, donc:

Class Dog <  ActiveRecord::Base
  belongs_to :house
end

Class House < ActiveRecord::Base
  has_many :dogs
end

Maintenant, imaginez que je veux aussi créer des chiens qui n'ont pas de maison. Ils n'appartiennent pas à la maison. Puis-je toujours utiliser cette structure de relation et simplement ne pas informer un :house_id lors de sa création?

Existe-t-il une meilleure pratique?

Obs.: J'ai utilisé cette analogie pour simplifier mon problème, mais ma situation réelle est la suivante: j'ai un modèle qu'un utilisateur peut en générer des instances. Il peut également créer des collections de ces instances, mais il peut laisser une instance en dehors d'une collection.

64
João Daniel

Je pense que c'est une approche absolument normale.

Vous pouvez simplement laisser house_id avec null valeur dans la base de données pour les modèles qui n'appartiennent à aucun autre.

22
Flexoid

Soyez prudent avec cela dans Rails 5 ...

l'appartenance est obligatoire par défaut

Désormais, chaque Rails aura une nouvelle option de configuration config.active_record.belongs_to_required_by_default = true, elle déclenchera une erreur de validation lors de la tentative de sauvegarde d'un modèle où les associations l'appartenance à des sont absentes.

config.active_record.belongs_to_required_by_default peut être changé en false et avec ce comportement ancien Rails ou nous pouvons désactiver cette validation sur chaque définition d'appartenance à, en passant simplement une option supplémentaire facultative: true comme suit:

class Book < ActiveRecord::Base
    belongs_to :author, optional: true
end

de: http://blog.michelada.io/whats-new-in-Rails-5

291
Wibbly