¿Cómo puedo decirle a Activerecord que no cargue columnas de blob a menos que se lo pida explícitamente? Hay algunos blobs bastante grandes en mi DB heredado que deben ser excluidos para objetos 'normales'.Detener el registro activo de la columna de blob
Respuesta
Creo que se puede pedir a AR para cargar columnas específicas en su invocación de encontrar:
MyModel.find(id, :select => 'every, attribute, except, the, blobs')
Sin embargo, esto tendría que ser actualizado a medida que agrega columnas, así que no es ideal. No creo que exista ninguna forma de excluir específicamente una columna en rieles (ni en una sola selección de SQL).
Creo que se puede escribir así:
MyModel.find(id, :select => (MyModel.column_names - ['column_to_exclude']).join(', '))
Prueba de esto antes de que tome mi palabra para ella sin embargo. :) respuesta
de fd es sobre todo la derecha, pero ActiveRecord doesn't currently accept an array como: seleccione argumento, por lo que necesita para unirse a las columnas deseadas en una cadena delimitada por comas, así:
desired_columns = (MyModel.column_names - ['column_to_exclude']).join(', ')
MyModel.find(id, :select => desired_columns)
Una limpia enfoque no requiere cambios en la forma de codificar en otra parte de su aplicación, es decir, sin ensuciar con :select
opciones
Por alguna razón que necesita o decide almacenar manchas en las bases de datos. Sin embargo, no desea mezclar columnas de blobs en la misma tabla que sus atributos regulares . BinaryColumnTable le ayuda a almacenar TODOS los blobs en en una tabla separada, administrada de forma transparente por un modelo ActiveRecord. Opcionalmente, le ayuda a registrar el tipo de contenido del blob.
uso es 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
Me acabo de encontrar con esta utilización del ferrocarril 3.
Afortunadamente no fue tan difícil de resolver. Configuré un default_scope
que eliminaba las columnas particulares que no quería del resultado. Por ejemplo, en el modelo que tenía había un campo de texto xml que podía ser bastante largo y no se usaba en la mayoría de las vistas.
default_scope select((column_names - ['data']).map { |column_name| "`#{table_name}`.`#{column_name}`"})
Usted verá a partir de la solución que tenía que asignar a las columnas completamente versiones aprobadas por lo que podrían seguir utilizando el modelo a través de las relaciones y sin ambigüedades de atributos. Más adelante, cuando quieras tener el campo, simplemente pega otro .select(:data)
para tenerlo incluido.
Hola Crish. Creé un [complemento Rails basado en tu idea llamado 'lazy_columns'] (https://github.com/jorgemanrubia/lazy_columns). ¡Gracias! – jmanrubia
Tenga en cuenta que esto no funciona al usar la opción: include – Christian
FYI, vi esto en mi consola después de usar esto: ADVERTENCIA DE DEPRESIÓN: la llamada a #default_scope sin un bloque está en desuso. Por ejemplo, en lugar de 'default_scope donde (color: 'red')', usa 'default_scope {where (color: 'red')}'. (Alternativamente puede simplemente redefinir self.default_scope) –
- 1. Yii - Obtener el mínimo, el máximo de una columna utilizando el registro activo
- 2. predeterminado para la columna serializada en la migración de registro activo
- 3. Codeigniter Registro activo: mayor que el enunciado
- 4. Cómo utilizar el registro activo sin rieles
- 5. Codeigniter - Ordenar registro activo alfabéticamente
- 6. rieles xml al objeto de registro activo
- 7. Registro activo de CodeIgniter: obtenga el número de filas devueltas
- 8. Codeigniter Registro activo 'where_or' agrupando
- 9. dinámico encontrar condiciones de registro activo
- 10. Registro activo de CodeIgniter no igual
- 11. Buscar valor dentro de la columna BLOB en MySQL
- 12. Detener el registro ActionController :: RoutingError Rails 3.2
- 13. Codeigniter: manejo de errores al usar el registro activo
- 14. ¿Rieles cómo tocar el objeto de registro activo sin bloquear?
- 15. ¿Cómo se usa el enlace activo para vincular el campo blob al control de TImage?
- 16. Detener los archivos de registro PostgreSQL de llenar el disco
- 17. ¿Cuál es la forma más fácil de duplicar un registro de registro activo?
- 18. CodeIgniter registro activo, Añadir IF en - función
- 19. Rubí objeto # advertencias Identificación y Registro Activo
- 20. COUNT/GROUP BY con registro activo?
- 21. ¿Qué es una buena biblioteca de registro activo de PHP?
- 22. Codeigniter: $ query-> free_result() cuando se usa el registro activo?
- 23. CodeIgniter registro activo instrucción de actualización con una unirse
- 24. Falsificar un modelo de registro activo sin db
- 25. Registro activo - Buscar registros que se crearon antes de hoy
- 26. Cómo comparar null in rails consulta de registro activo
- 27. Cómo traducir las validaciones del modelo de registro activo
- 28. Rails 3- Administrador activo (Formtastic), establecer ancho de columna
- 29. ORM y patrón de registro activo en PHP?
- 30. Cómo detener PHP desde el registro PHP Aviso errores
Se corrigió la segunda sugerencia, según la observación de Zeke. Gracias @Zeke. –