update rails query left joins includes has_and_belongs_to_many active ruby-on-rails activerecord

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 .