2012-09-18 23 views
5

Arel 3.0.2 proporciona dos clases para especificar el tipo de unión: Arel::Nodes::InnerJoin y Arel::Nodes::OuterJoin y usa InnerJoin como valor predeterminado.¿Cómo se unió a Arel?

foo = Arel::Table.new('foo') 
bar = Arel::Table.new('bar') 

foo.join(bar, Arel::Nodes::InnerJoin) # inner 
foo.join(bar, Arel::Nodes::OuterJoin) # outer 

foo.join(bar, ???) # left 

¿Cómo se puede unir dos tablas si desea producir una combinación izquierda?

+0

Tal vez esto puede ayudar: http://ruby.ryanbigg.com/post/1468788928/left-outer-join-with-arel –

Respuesta

7

Uso

foo.join(bar, Arel::Nodes::OuterJoin) # outer 

Debido LEFT JOIN = Unión externa izquierda. Exterior es una opción. Ver here

0

Aquí hay un ejemplo completo con modelos de rieles para cualquiera que quiera ver.

Me tomó un par de horas para averiguar así que pensé que iba a compartir con el mundo

Esto supone que tiene un modelo llamado RssFeed y otro llamado RssFeedUser que es un modelo unirse a un has_many: a través de una modelo llamado User

RssFeed.find_by_sql(RssFeed.arel_table.join(RssFeedUser.arel_table,Arel::Nodes::OuterJoin).on(RssFeed.arel_table[:id].eq(RssFeedUser.arel_table[:rss_feed_id])).where(RssFeedUser.arel_table[:user_id].eq(nil)).project('rss_feeds.*')) 
Cuestiones relacionadas