Me preguntaba si había una forma de usar "find_by_sql" dentro de un named_scope. Me gustaría tratar sql personalizado como named_scope para que pueda encadenarlo a mis existing_scopes existentes. También sería bueno para optimizar un fragmento de sql que utilizo con frecuencia.Encapsulando SQL en un named_scope
Respuesta
Si bien se puede poner cualquier SQL que te gusta en las condiciones de un ámbito con nombre, si a continuación, llama a find_by_sql
entonces los 'ámbitos 'ser tirado.
Dado:
class Item
# Anything you can put in an sql WHERE you can put here
named_scope :mine, :conditions=>'user_id = 12345 and IS_A_NINJA() = 1'
end
Esto funciona (que sólo se pega la cadena SQL ahí - si usted tiene más de un consiguen unieron con Y)
Item.mine.find :all
=> SELECT * FROM items WHERE ('user_id' = 887 and IS_A_NINJA() = 1)
Sin embargo, esto no lo hace
Items.mine.find_by_sql 'select * from items limit 1'
=> select * from items limit 1
Así que la respuesta es "No". Si piensas en lo que debe suceder detrás de las escenas, entonces tiene mucho sentido. Para construir los raíles SQL tiene que saber cómo encaja.
Cuando crea consultas normales, select
, joins
, conditions
, etc. se dividen en distintas partes. Rails sabe que puede agregar cosas a las condiciones sin afectar a todo lo demás (que es cómo funcionan with_scope
y named_scope
).
Sin embargo, con find_by_sql
, le da a los rieles una cuerda grande. No sabe qué es lo que pasa, por lo que no es seguro que entre y agregue las cosas que necesitaría agregar para que los ámbitos funcionen.
seguro de por qué no
: named_scope: condiciones => [SQL]
Esto no trata exactamente sobre lo que preguntaste, pero podrías investigar 'contruct_finder_sql'. Le permite obtener el SQL de un alcance con nombre.
named_scope :mine, :conditions=>'user_id = 12345 and IS_A_NINJA() = 1'
named_scope :additional {
:condtions => mine.send(:construct_finder_sql,{}) + " additional = 'foo'"
}
- 1. Encapsulando un algoritmo en una clase
- 2. Aditivo encadenamiento con named_scope
- 3. Encapsulando controles de usuario en ASP.NET MVC
- 4. Named_scope in rails unique records?
- 5. Ansioso de cargar un named_scope desde una asociación en Rails
- 6. ¿Qué es scope/named_scope en rieles?
- 7. encapsulando la lógica en una consulta de linq a sql a través del método de extensión
- 8. ¿Cómo puedo hacer que named_scope en Rails devuelva un valor en lugar de una matriz?
- 9. Encapsulando componentes de la interfaz de usuario con jQuery
- 10. Encapsulando una llamada de servicio dentro de un método de objeto de dominio
- 11. Consulta de carriles complejos: ¿uniones? Sub-seleccionar? ¿Todavía puedo usar named_scope?
- 12. Devolución de una matriz de objetos mediante named_scope - has_many ... belongs_to association; UNION TODA consulta
- 13. encapsulando velocidades H.264 de velocidad de cuadro variable en la corriente de transporte MPEG2
- 14. ¿Qué significa el asterisco antes de la variable en la lista del argumento named_scope?
- 15. Encapsulando la consulta de Postgres a la vista lo hace extremadamente lento
- 16. ¿Cómo incluir un archivo sql en un archivo sql? MS SQL
- 17. Cómo importar un archivo .sql en SQL Server Express
- 18. ¿Cómo importo un archivo de datos sql en SQL Server?
- 19. SQL en SQL Server
- 20. ¿Qué es un índice en SQL?
- 21. Incrementando un entero en SQL Server
- 22. SQL clasificación de datos en un patrón
- 23. generar un archivo KML en SQL 2008
- 24. ¿Qué representa un servidor doble en sql?
- 25. ¿Cómo volteo un poco en SQL Server?
- 26. Cómo usar SQL en un archivo CSV
- 27. Declaración SQL LIKE en un tipo DateTime
- 28. grupo por un campo calculado en SQL
- 29. ¿Cómo identifico un interbloqueo en SQL Azure?
- 30. Cómo redondear un tiempo en T-SQL