Je suis coincé dans une situation étrange, je travaille sur la mise à niveau d'une application rails 3 existante vers une application rails 5.
En utilisant rails 3, j'ai un rapport d'objet qui a de nombreuses organisations
@report.organizations.count # 1
3 Réponses :
Selon le guide , cela devrait fonctionner. Si ce n'est pas le cas, essayez d'utiliser create
:
@report.organizations.create
pour une raison quelconque, je ne veux pas créer une nouvelle organisation à la place, je dois pousser la nouvelle organisation dans la relation activerecord sans créer
Si le nombre a été modifié dans Rails 4, vous créiez effectivement une nouvelle organisation
Comme il s'agit simplement d'une classe et non étendue par la classe de base activerecord, organziations
est un attribut_reader dans la classe de rapport dont la valeur est calculée en trouvant org
à partir de la base de données.
Lorsque vous utilisez new définitivement, vous devez enregistrer cette variable Par exemple
Organization.create(name:"org2",description: "something") Organization.count #2
sinon, utilisez la méthode create pour créer l'enregistrement Soudainement, les deux sont identiques
organization=Organization.new organization.name = "organization 1" organization.description= "Something description" organization.save #save the array obj Organization.count #1
Cela fonctionne pour moi:
a=[] a << @report.organizations a.count # => 1 a << Organization.new a.count # => 2
allez-vous sauvegarder cet enregistrement plus tard?
si non, utilisez directement
@ report.organizations.count + 1
Obtenez-vous la même erreur pour les rails-4 également?
Pourquoi cela s'affiche comme
# au lieu de
Organization :: ActiveRecord_Associations_CollectionProxy
Je ne sais pas pourquoi peut-être être dans les rails 5, c'est comme ça seulement, aussi je n'ai pas vérifié dans les rails 4 parce que je passe des rails 3 aux rails 5 directement :-)
Eh bien, j'avais fait ça pour un gros projet mais nous avons fait comme
rails-3 -> rails-4
d'abord puisrails-4 -> rails-5
pour garder la trace.vérifiez la réponse ici stackoverflow.com/questions / 53891347 /… , vous trouverez également le code dans lequel cela a été supprimé.