Comment puis-je demander à Activerecord de ne pas charger les colonnes blob sauf demande explicite? Il y a quelques gros blobs dans mon DB hérité qui doivent être exclus pour les objets 'normaux'.Arrêter Activerecord à partir du chargement de la colonne Blob
Répondre
Je crois que vous pouvez demander AR charger des colonnes spécifiques dans votre appel pour trouver:
MyModel.find(id, :select => 'every, attribute, except, the, blobs')
Cependant, il devrait être mis à jour que vous ajoutez des colonnes, il est donc pas idéal. Je ne pense pas qu'il existe un moyen d'exclure spécifiquement une colonne dans les rails (ni dans une seule sélection SQL).
Je suppose que vous pouvez l'écrire comme ceci:
MyModel.find(id, :select => (MyModel.column_names - ['column_to_exclude']).join(', '))
Tester ces avant de prendre ma parole bien. :) La réponse de
fd est le plus souvent droit, mais ActiveRecord doesn't currently accept an array comme: l'argument de sélection, de sorte que vous devrez joindre les colonnes souhaitées dans une chaîne délimitée par des virgules, comme ceci:
desired_columns = (MyModel.column_names - ['column_to_exclude']).join(', ')
MyModel.find(id, :select => desired_columns)
Un environnement propre approche nécessitant aucune modification de la façon dont vous le code d'autre où dans votre application, à savoir pas déconner avec les options :select
pour quelque raison que ce dont vous avez besoin ou choisir de blobs stocker dans des bases de données. Cependant, vous ne souhaitez pas mélanger des colonnes blob dans la même table que vos attributs habituels . BinaryColumnTable vous aide à stocker TOUS les blobs dans une table distincte, gérée de manière transparente par un modèle ActiveRecord. En option, il vous aide à enregistrer le type de contenu du blob.
utilisation est simple
Member.create(:name => "Michael", :photo => IO.read("avatar.png"))
#=> creates a record in "members" table, saving "Michael" into the "name" column
#=> creates a record in "binary_columns" table, saving "avatar.png" binary into "content" column
m = Member.last #=> only columns in "members" table is fetched (no blobs)
m.name #=> "Michael"
m.photo #=> binary content of the "avatar.png" file
Je viens de rencontrer dans ce rail en utilisant 3.
Heureusement, il n'a pas été si difficile à résoudre. J'ai mis un default_scope
qui a enlevé les colonnes particulières que je ne voulais pas du résultat. Par exemple, dans le modèle que j'avais, il y avait un champ de texte xml qui pouvait être assez long et qui n'était pas utilisé dans la plupart des vues.
default_scope select((column_names - ['data']).map { |column_name| "`#{table_name}`.`#{column_name}`"})
Vous verrez de la solution que je devais cartographier les colonnes à des versions entièrement qualifiées je pourrais continuer ainsi d'utiliser le modèle grâce à des relations sans ambiguïtés dans les attributs. Plus tard, lorsque vous voulez avoir le champ juste virer sur un autre .select(:data)
pour l'avoir inclus.
Salut Crish. J'ai créé un plugin [Rails basé sur votre idée nommée 'lazy_columns'] (https://github.com/jorgemanrubia/lazy_columns). Merci! – jmanrubia
Notez que cela ne fonctionne pas lorsque vous utilisez l'option: include – Christian
FYI, vu ceci sur ma console après avoir utilisé ceci: DEPRECATION AVERTISSEMENT: Appeler #default_scope sans un bloc est obsolète. Par exemple, au lieu de 'default_scope où (color: 'red')', veuillez utiliser 'default_scope {where (couleur: 'red')}'. (Vous pouvez également redéfinir self.default_scope.) –
- 1. Pourquoi je n'arrive pas à lancer le fichier BLOB oracle à partir du Java Blob natif
- 2. Comment arrêter ActiveRecord à la recherche d'une table?
- 3. Chargement des assemblages à partir du réseau
- 4. Impossible de recharger l'association ActiveRecord à partir du contrôleur
- 5. Contrôles TableLayoutPanel - Verrouiller la colonne à partir du défilement horizontal?
- 6. Comment arrêter l'ordinateur à partir de C#
- 7. Comment renvoyer une date (pas un TimeWithZone) à partir d'une colonne de date Oracle dans ActiveRecord?
- 8. Chargement dynamique du contenu NSPopUpButton à partir du fichier XML
- 9. problème avec la récupération d'une colonne BLOB en PHP + MySQLi
- 10. ASPNet EMail pièce jointe à partir de SQL BLOB
- 11. Chargement de Google Analytics à partir du document jQuery prêt?
- 12. Snippet pour créer un fichier à partir du contenu d'un blob en Java
- 13. Comment accéder à ActiveRecord :: AutosaveAssociation.marked_for_destruction? à partir de modèle parent
- 14. Erreur lors de la création de l'index spatial sur la colonne MySQL BLOB
- 15. Comment arrêter la propriété TabIndex de CompositeControl à partir de la définition de tabindex sur l'étendue du conteneur
- 16. Chargement de la bibliothèque Dojo à partir d'AOL et des codes Widget à partir de Local?
- 17. Chargement de la DLL C++ managée à partir du programme C++ ordinaire via LoadLibrary
- 18. Créer un tableau PHP à partir de la colonne MySQL
- 19. Comment arrêter la soumission du formulaire?
- 20. ActiveRecord et chargement des données de tables liées
- 21. Flex 3, ne peut pas convertir SystemManager à SystemManager lors du chargement à partir du serveur?
- 22. Appel du code .NET à partir d'IronPython, erreur lors du chargement de l'assembly log4net
- 23. Mémoire fuite UIWebView lors du chargement à partir du fichier au lieu de l'URL?
- 24. ASP.NET MVC 1.0 et Castle ActiveRecord 2.0 Chargement paresseux
- 25. NHibernate/ActiveRecord - Un moyen de mapper à une colonne de clé étrangère seulement?
- 26. retarder ou arrêter le chargement des annonces google
- 27. Problème lors de la mise à jour de la colonne XML à partir de .NET TableAdapter
- 28. Pourquoi X509Certificate2 ne parvient parfois pas à créer à partir d'un blob?
- 29. From String to Blob
- 30. Erreur de chargement de gemme, installé à partir de Github
Correction de la deuxième suggestion, selon l'observation de Zeke. Merci @Zeke. –