J'ai une application dans laquelle attr_accessor est utilisé pour conserver des données temporaires pour un modèle qui sera transmis à une tâche rake. Voyant qu'il n'y a pas de champ de base de données pour ces attributs et qu'ils ne sont pas calculés à partir des données de la base de données, les données attr_accessor seront-elles conservées et disponibles pour la tâche rake? Que se passe-t-il si j'ai besoin de redémarrer le serveur - les données sont-elles perdues alors si elles ne sont pas enregistrées dans la base de données? Ou pour le retirer, ai-je besoin d'enregistrer dans un fichier temporaire ou un champ de base de données?persistance de l'attribut attr_accessor non-DB dans Rails
Répondre
Je suppose que vous demandez si les données stockées dans les attributs des objets ActiveRecord issus des requêtes Web seront disponibles lors de l'accès via une tâche Rake?
Non, ils ne le feront pas. Ces données ne seront même pas disponibles pour la prochaine demande Web. Ces données ne seront même pas là si vous chargez le même enregistrement deux fois.
class Thing < ActiveRecord::Base
attr_accessor :data
end
#try this in script/console
thing = Thing.find(:first)
thing.data = "Something"
thing = Thing.find(:first)
puts thing.data
-> nil
Bien sûr, il sera perdu, où pensez-vous que les données vont quand il meurt? À une donnée h (e) aven d'où il peut toujours revenir? Je voudrais savoir ce dont vous avez besoin pour les données, mais la réponse ultime est probablement que les données appartiennent à la base de données, à moins qu'il s'agisse de grandes données binaires telles que des images, où vous devriez les enregistrer dans le système de fichiers.
Cela dépend de la façon dont vous transmettez vos données à la tâche rake et pourquoi. Si vous essayez de faire le travail hors-bande avec la requête, ce qui signifie ne pas obliger l'utilisateur à attendre sa fin, je vous recommande de regarder l'excellent screencast de Ryan ici http://railscasts.com/episodes/128-starling-and-workling pour en savoir plus sur les files d'attente.
Si c'est une autre raison exotique, vous devez utiliser rake comme ceci, vous pouvez passer les données en tant que paramètres de ligne de commande. Cela dépend de la quantité de données et de leur complexité que vous devez transmettre, car elles peuvent rapidement devenir incontrôlables.
En utilisant l'exemple de Daniel en haut:
chose = Thing.find (: d'abord) thing.data = "Quelque chose"
rake myraketask thing_id=#{thing.id} data=#{thing.data}
- 1. Pourquoi attr_accessor clobber les variables existantes dans ce modèle dans Ruby on Rails?
- 2. Service de persistance SQL
- 3. Persistance Java dans la base de données
- 4. Persistance de couture à distance
- 5. persistance Flux de travail - WebServiceInputActivity
- 6. Netbeans/erreur API de persistance
- 7. ASP.NET web.config appsettings persistance
- 8. Variable Persistance dans la liste chaînée
- 9. Unité de persistance par défaut JPA
- 10. Persistance de std :: map en C++
- 11. Persistance du magasin de préférence Eclipse
- 12. Motif persistance - Observer à base de règles
- 13. persistance Workflow pour plusieurs flux de travail
- 14. Statut de l'objet (sous-ensemble) Persistance
- 15. persistance des valeurs de case à cocher
- 16. Qu'est-ce que mattr_accessor dans un module Rails?
- 17. Windows Workflow: Pourquoi sont-ils bloqués dans la persistance?
- 18. Persistance des données WCF entre les sessions
- 19. Persistance d'une colonne datetime calculée dans SQL Server 2005
- 20. trois tableaux relatifs Persistance utilisant nhibernate
- 21. Asp.Net/C# persistance des variables statiques
- 22. Persistance d'une variable d'environnement via Ruby
- 23. Persistance de la position de défilement de DIV pendant l'impression
- 24. Un magasin de persistance de sauvegarde. Quelles sont mes options?
- 25. Accès au calque de domaine pour les éléments de persistance
- 26. Contrôle des transactions de points de persistance WF
- 27. Services de flux de travail La persistance ne fonctionne pas
- 28. Persistance utilisateur: asp.net mise en cache:
- 29. Drools Flow Persistance avec MySQL (jpa, hibernate)
- 30. Explication du schéma de persistance de Windows Workflow Foundation?
Si 'data' un colon avant qu'il ne? Quelle est la distinction? –
Oui @BenSaufley merci. Une couleur désigne un symbole par opposition à une variable locale. [En savoir plus sur les symboles] (http://www.robertsosinski.com/2009/01/11/the-difference-between-ruby-symbols-and-strings/) –