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.
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.
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