Your SlideShare is downloading. ×
0
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Integración de Arel en ActiveRecord

1,027

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,027
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Transcript

    • 1. Integración de Arel en ActiveRecord Emilio Tagua - miloops@gmail.com
    • 2. ¿Quién les habla?
    • 3. ¿Quién les habla? • Co-fundador de Eventioz, el sitio de registro online más grande de Latinoamérica.
    • 4. ¿Quién les habla? • Co-fundador de Eventioz, el sitio de registro online más grande de Latinoamérica. • Utilizando Ruby y Rails desde hace más de 3 años.
    • 5. ¿Quién les habla? • Co-fundador de Eventioz, el sitio de registro online más grande de Latinoamérica. • Utilizando Ruby y Rails desde hace más de 3 años. • Ganador de Rails Hackfest y escritor de la guía oficial "Debugging Rails Applications guide" para el Rails Guide Hackfest.
    • 6. ¿Quién les habla? • Co-fundador de Eventioz, el sitio de registro online más grande de Latinoamérica. • Utilizando Ruby y Rails desde hace más de 3 años. • Ganador de Rails Hackfest y escritor de la guía oficial "Debugging Rails Applications guide" para el Rails Guide Hackfest. • Contribuidor a Rails desde el 2008 con más de 40 parches antes de participar en Google.
    • 7. Google Summer of Code
    • 8. Google Summer of Code • Programa creado por Google en el año 2005.
    • 9. Google Summer of Code • Programa creado por Google en el año 2005. • Cualquier estudiante puede enviar una propuesta de un proyecto para alguna organización Open Source que participe del programa.
    • 10. Google Summer of Code • Programa creado por Google en el año 2005. • Cualquier estudiante puede enviar una propuesta de un proyecto para alguna organización Open Source que participe del programa. • Si es aceptada, se asigna un mentor y comienza el programa.
    • 11. Google Summer of Code • Programa creado por Google en el año 2005. • Cualquier estudiante puede enviar una propuesta de un proyecto para alguna organización Open Source que participe del programa. • Si es aceptada, se asigna un mentor y comienza el programa. • Mi propuesta para GSoC 2009: Integrar Arel en ActiveRecord.
    • 12. Algebra Relacional
    • 13. Algebra Relacional • Describe la manipulación de los datos.
    • 14. Algebra Relacional • Describe la manipulación de los datos. • Operaciones se usan como representación intermedia de una consulta a una base de datos.
    • 15. Algebra Relacional • Describe la manipulación de los datos. • Operaciones se usan como representación intermedia de una consulta a una base de datos. • Sirven para obtener una versión más optimizada y eficiente de la consulta.
    • 16. Arel
    • 17. Arel • Algebra Relacional para Ruby.
    • 18. Arel • Algebra Relacional para Ruby. • Creada por Nick Kallen (Twitter).
    • 19. Arel • Algebra Relacional para Ruby. • Creada por Nick Kallen (Twitter). • Simplifica la generación de consultas SQL complejas.
    • 20. Arel • Algebra Relacional para Ruby. • Creada por Nick Kallen (Twitter). • Simplifica la generación de consultas SQL complejas. • Manipulación de objetos para la creación de las mismas.
    • 21. Arel • Algebra Relacional para Ruby. • Creada por Nick Kallen (Twitter). • Simplifica la generación de consultas SQL complejas. • Manipulación de objetos para la creación de las mismas. • Inmutabilidad de las relaciones.
    • 22. Arel users = Table(:users) users.to_sql # => SELECT * FROM users
    • 23. Arel users.where(users[:name].eq('amy')) # => SELECT * FROM users WHERE users.name = 'amy'
    • 24. Arel users.join(photos).on(users[:id].eq(photos[:user_id])) # => SELECT * FROM users INNER JOIN photos ON users.id = photos.user_id
    • 25. ActiveRecord
    • 26. ActiveRecord • Relaciona objetos de negocio con tablas de la base de datos para crear un modelo de dominio persistente.
    • 27. ActiveRecord • Relaciona objetos de negocio con tablas de la base de datos para crear un modelo de dominio persistente. • Implementación del patrón mapeo objeto- relacional (ORM) en Ruby on Rails.
    • 28. ActiveRecord • Relaciona objetos de negocio con tablas de la base de datos para crear un modelo de dominio persistente. • Implementación del patrón mapeo objeto- relacional (ORM) en Ruby on Rails. • Un objeto representa una fila en una base de datos o vista, encapsulando el acceso y agregando lógica de dominio los datos.
    • 29. ActiveRecord
    • 30. ActiveRecord • Resuelve problemas como la falta de asociaciones y herencia (STI).
    • 31. ActiveRecord • Resuelve problemas como la falta de asociaciones y herencia (STI).
    • 32. ActiveRecord • Resuelve problemas como la falta de asociaciones y herencia (STI). • Agregaciones, validaciones, callbacks, observers, transacciones, reflexiones, etc.
    • 33. Integrar Arel en ActiveRecord
    • 34. Integrar Arel en ActiveRecord • Proveer a ActiveRecord una implementación más limpia de generación de consultas.
    • 35. Integrar Arel en ActiveRecord • Proveer a ActiveRecord una implementación más limpia de generación de consultas. • Eliminar la generación de SQL mediante la concatenación de cadenas delegándolo a un framework-framework como Arel.
    • 36. Integrar Arel en ActiveRecord • Proveer a ActiveRecord una implementación más limpia de generación de consultas. • Eliminar la generación de SQL mediante la concatenación de cadenas delegándolo a un framework-framework como Arel. • Tener código más limpio, mantenible y sólido en los componentes de ActiveRecord.
    • 37. Integrar Arel en ActiveRecord • Proveer a ActiveRecord una implementación más limpia de generación de consultas. • Eliminar la generación de SQL mediante la concatenación de cadenas delegándolo a un framework-framework como Arel. • Tener código más limpio, mantenible y sólido en los componentes de ActiveRecord. • Proveer una API mejor.
    • 38. Integrar Arel en ActiveRecord • Proveer a ActiveRecord una implementación más limpia de generación de consultas. • Eliminar la generación de SQL mediante la concatenación de cadenas delegándolo a un framework-framework como Arel. • Tener código más limpio, mantenible y sólido en los componentes de ActiveRecord. • Proveer una API mejor. • Manipulación de relaciones.
    • 39. Alcance
    • 40. Alcance • Finders
    • 41. Alcance • Finders • Acciones ABM de clase e instancias
    • 42. Alcance • Finders • Acciones ABM de clase e instancias • Migraciones
    • 43. Alcance • Finders • Acciones ABM de clase e instancias • Migraciones • Locking
    • 44. Alcance • Finders • Acciones ABM de clase e instancias • Migraciones • Locking • Cálculos
    • 45. Alcance • Finders • Acciones ABM de clase e instancias • Migraciones • Locking • Cálculos • Asociaciones
    • 46. Alcance • Finders • Acciones ABM de clase e instancias • Migraciones • Locking • Cálculos • Asociaciones
    • 47. ActiveRecord::Relation
    • 48. ActiveRecord::Relation • Rails 2.3 ActiveRecord::Base#all es una alias de ActiveRecord::Base#find(:all).
    • 49. ActiveRecord::Relation • Rails 2.3 ActiveRecord::Base#all es una alias de ActiveRecord::Base#find(:all).
    • 50. ActiveRecord::Relation • Rails 2.3 ActiveRecord::Base#all es una alias de ActiveRecord::Base#find(:all). • Rails 3 ActiveRecord::Base#all devuelve un objeto de tipo ActiveRecord::Relation.
    • 51. ActiveRecord::Relation
    • 52. ActiveRecord::Relation • ActiveRecord::Relation#(first|select|group| order|limit|offset|joins|conditions).
    • 53. ActiveRecord::Relation • ActiveRecord::Relation#(first|select|group| order|limit|offset|joins|conditions). • Posee dentro una estructura para construir una consulta pero no la ejecuta hasta que ActiveRecord::Relation#to_a es llamado.
    • 54. ActiveRecord::Relation • ActiveRecord::Relation#(first|select|group| order|limit|offset|joins|conditions). • Posee dentro una estructura para construir una consulta pero no la ejecuta hasta que ActiveRecord::Relation#to_a es llamado. • Permite la construcción de una consulta mediante la manipulación de objetos.
    • 55. Un mejor código # Rails 2.3 def destroy   unless new_record?     connection.delete(       "DELETE FROM #{self.class.quoted_table_name} " +       "WHERE #{connection.quote_column_name(self.class.primary_key)} = #{quoted_id}",       "#{self.class.name} Destroy"     )   end   @destroyed = true   freeze end # Rails 3 def destroy   unless new_record?     self.class.arel_table.conditions(self.class.arel_table[self.class.primary_key] .eq(id)).delete   end   @destroyed = true   freeze end
    • 56. Un mejor código # Rails 2.3 def update(attribute_names = @attributes.keys)   quoted_attributes = attributes_with_quotes(false, false, attribute_names)   return 0 if quoted_attributes.empty?   connection.update(     "UPDATE #{self.class.quoted_table_name} " +     "SET #{quoted_comma_pair_list(connection, quoted_attributes)} " +     "WHERE #{connection.quote_column_name(self.class.primary_key)} = #{quote_value(id)}",     "#{self.class.name} Update"   ) end # Rails 3 def update(attribute_names = @attributes.keys)   attributes_with_values = arel_attributes_values(false, false, attribute_names)   return 0 if attributes_with_values.empty?   self.class.arel_table.conditions( self.class.arel_table[self.class.primary_key].eq(id) ).update(attributes_with_values) end
    • 57. API @posts = Post.all(:conditions => {:title => "A new topic"}) @posts = @posts.limit(n) if n && n > 0 for post in @posts   p post.title end
    • 58. Inmutabilidad Cada operación sobre una relación devuelve una nueva operación def select(selects) selects.blank? ? self : Relation.new(@klass, @relation.project(selects)) end def group(groups) groups.blank? ? self : Relation.new(@klass, @relation.group(groups)) end
    • 59. No es "magia" Arel::Relation#select_sql # ...  build_query           "SELECT     #{select_clauses.join(', ')}",           "FROM       #{table_sql(Sql::TableReference.new(self))}",           (joins(self)                                   unless joins(self).blank? ),           ("WHERE     #{where_clauses.join("ntAND ")}" unless wheres.blank?      ),           ("GROUP BY  #{group_clauses.join(', ')}"       unless groupings.blank?   ),           ("ORDER BY  #{order_clauses.join(', ')}"       unless orders.blank?      ),           ("LIMIT     #{taken}"                          unless taken.blank?       ),           ("OFFSET    #{skipped}"                        unless skipped.blank?     ) # ...
    • 60. ¡¡¡ Gracias !!! ¿¿¿ Preguntas ??? Emilio Tagua - miloops@gmail.com

    ×