mis à niveau vers des rails 3.2.9 aujourd'hui à partir de 3.2.7 et il semble que la méthode "to_i" a été supprimée de Aciverecord. P>
est-ce par conception? Ou est-ce un bug? Je ne peux en trouver aucune mention dans les notes de changement. Cela va avoir une incidence sur beaucoup de code. p>
Merci! P>
6 Réponses :
Je ne crois pas que la méthode to_i code> a été disponible sur les objets AR eux-mêmes. Pouvez-vous être un peu plus précis sur les utilisations précédentes de la méthode, qui échoue maintenant? p>
Il y a eu un changement en ce qui concerne la méthode "to_i" dans les rails 3.2.9, mais qui traite des colonnes et non des tables. Voir ici . p>
Donc, dans votre code, si vous passez un objet entier au lieu de la valeur de la colonne, elle était en silence auparavant. Mais maintenant, il appellera la méthode "to_i" sur l'objet et soulever une exception. P>
La méthode Compte tenu des éléments suivants: p> précédemment, vous pourriez attribuer un professeur à une conférence comme celle-ci: p > ou comme ceci: p> Dans le premier cas, tout est simple car le professeur code> code> un objet professeur. Dans le second cas, bien que ActiveCord a exercé une magie pour contraindre l'ID du professeur, comme dans les rails 3.2.8 et plus que la magie ne fonctionne plus . C'est bien de quelque manière que ce soit un indice que vous faites probablement quelque chose de mal. Par exemple, s'il n'y a pas de colonne #to_i code> n'a jamais existé, mais la manière dont l'attribution d'objets à des valeurs a Changé dans les rails 3.2.8 .
le professeur_id code> attend un entier à la place. P>
professeur_id code> dans la base de données, mais juste
professeur code> qui attend un entier, attribuer comme ça ne fonctionnera plus. P> < p> On dirait que ce sera réinitialisée au comportement précédent dans Rails 3.2.11 . p> p>
Il n'y avait pas de "magie pour contraindre l'identité du professeur" en 3.2.8 et ci-dessous - il a toujours attribué 1, pas l'identifiant d'objet.
Suivi sur Luca, j'utilise des rails 3.2.11 et je ne suis pas sûr d'avoir un tel code, mais j'ai trouvé cela pour ne plus travailler:
@lecture.update_attribute(:professor_id, Professor.find_by_id(1))
J'ai couru dans la même erreur. Ce n'est pas qu'Aciverecord manque de #to_i, mais quelque chose d'autre, lequel dans mon cas implique l'usine_girl Gem. Voici un cas isolé de la différence: p> puis dans la console: p> Cependant, si je fais la même séquence d'étapes avec: p> puis dans la console, je vois: p> Notez le nil user_id pour les rails 3.2.11 P> p>
Je suppose que si la colonne est ID, nous devons fournir un ID: : user_id => user.first.id code>
Ceci est correct - 3.2.9 L 'élève actuellement une exception si vous essayez d'attribuer un objet ActiveRecord à une colonne entière. Avant 3.2.8, c'était en fait cassé - usine (: note ,: user_id => user.find (6)) code> aurait toujours défini
user_id code> sur 1, pas 6, pas 6 comme vous pouvez vous attendre à l'ID. Vous devez toujours appeler
user.first.id code>.
Ouais moi aussi j'ai le même problème lorsque je met à niveau les rails version 3.2.3 dans les rails 3.2.11. P>
Voici quelques extraits de code Quel problème exact est là p>
in rails 3.2.3
Doctor = Doctor.First
Patient = patient.Nouveau
PATIENT.DOCTOR_ID = Médecin (l'attribution d'objet droit est valide)
Patient.Save! (valide)
de
Dans les rails 3.2.11
Doctor = Doctor.First
Patient = patient.Nouveau
PATIENT.DOCTOR_ID = Docteur (l'attribution d'objet latéral droit n'est pas valide)
Patient.Save! (invalide)
Nométhoderror: erreur indéfinie 'to_i' Nous avons eu ce genre de missions. P>
Conclusion est que nous utilisons l'utilisation _id = entier que non seulement comme des missions d'objet.
Plus de détails < / p>
Je suis sur 3.2.6 et il n'y a pas de
to_i code> sur les objets ou les relations deaciverecord ...