ruby-on-rails - left - rails sql query
Rails 3 Encadenamiento de método ActiveRecord, bajo el capó (1)
Supongamos que crea una consulta que implica el encadenamiento de métodos múltiples, como
Post.where(''id > 10'').limit(20).order(''id asc'').except(:order)
Me pregunto qué sucede detrás de la escena? Presumiblemente, cada parte de la cadena ayudará a construir un SQL SELECT y, una vez que la cadena esté "completa", se ejecutará la declaración, se crearán modelos, etc. ¿Cómo ''sabe'' dónde está el final de la cadena? ¿Devuelve cada método una ActiveRecord :: Relation que crea un fragmento de SQL?
Está en lo cierto, cada uno de estos devuelve una relación ActiveRecord::Relation
. Cada llamada al método se basa en la relación a la que fue llamado (excepto el primero, que obviamente no tiene nada sobre lo que construir, ya que no fue invocado en una relación), y lo devuelve.
"Sabe" dónde está el final de la cadena porque la consulta no se ejecuta realmente hasta que intenta manipular / acceder a los datos, y al hacerlo tiene (normalmente implícitamente) llamado to_a
que ejecuta exec_queries
.