2015-08-12 2 views
7

Je développe une application web en utilisant les rails 4 pour la première fois. Je rends toutes mes associations de modèles bidirectionnelles et j'utilise reverse_of là où c'est autorisé. A la lecture de la documentation, j'ai développé l'impression que c'est probablement la meilleure pratique, mais cela n'est jamais clairement explicite nulle part.rails 4 Quand "inverse_of" est-il requis?

J'apprécierais des conseils généraux à cet égard de la part de développeurs de rails expérimentés. J'espère que la question n'est pas trop vague pour avoir de la valeur ici.

Merci!

Mise à jour: En plus des noms non standard, il semble y avoir deux principaux cas supplémentaires où est nécessaire inverse_of définissant explicitement:

  1. pour INVALID_AUTOMATIC_INVERSE_OPTIONS (http://www.rubydoc.info/docs/rails/ActiveRecord/Reflection/AssociationReflection)
  2. si vous acceptez attributs imbriqués - C'est parce que l'objet parent n'est pas encore enregistré et n'a donc pas d'identifiant. Voir http://viget.com/extend/exploring-the-inverse-of-option-on-rails-model-associations

Répondre

3

Il est généralement souhaitable d'avoir des inverses mis en place. La bonne nouvelle est que cela est géré automatiquement dans la plupart des cas. Vous avez généralement seulement besoin de définir explicitement les inverses pour les associations avec des noms non standard. Vous pouvez en savoir beaucoup plus dans le official documentation.

+0

Merci. Je trouve que j'ai encore rencontré le problème décrit ici: http://viget.com/extend/exploring-the-inverse-of-option-on-rails-model-associations sous la rubrique _Créer un objet et ses enfants via accept_nested_attributes_for dans une: has_many association._ Je trouve qu'il est plus facile de simplement définir les inverses pour chaque association et de cette façon je n'ai pas à m'inquiéter de savoir si ça va "fonctionner" pour un cas donné. –

+4

@Nesteddoll Plus facile à court terme, peut-être. Je gère littéralement des centaines d'applications Rails de production et je peux vous dire avec certitude que jeter par terre votre application avec du code inutile que vous ne comprenez pas deviendra vite un cauchemar de maintenance. Relevez le défi d'être meilleur, n'ajoutez pas de code supplémentaire à votre application dont vous n'avez pas besoin et n'ajoutez pas de code que vous ne comprenez pas. Votre futur moi vous remerciera. –

+0

merci. J'apprécie ce que vous dites - et je vais regarder dans reverse_of plus en détail. –