1
votes

Comment pousser un objet dans ActiveRecord :: Relation in rails 5

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


7 commentaires

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 puis rails-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é.


3 Réponses :


1
votes

Selon le guide , cela devrait fonctionner. Si ce n'est pas le cas, essayez d'utiliser create :

 @report.organizations.create


3 commentaires

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.



1
votes

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


0 commentaires

0
votes

Cela fonctionne pour moi:

a=[]
a << @report.organizations
a.count # => 1
a << Organization.new
a.count # => 2


0 commentaires