Join

Es la primera vez que hago un join en ruby, ojeando lo primero que he
encontrado he hecho ésto:
@fotos=Foto.find(:all,:select=>“f.id,f.hidden,f.titulo,f.foto_grande,f.foto_peq,f.obra_id,f.descripcion,f.tipo,f.categoria_id,c.categoria”,
:conditions=>[“f.hidden=0 and f.tipo=0 and
f.obra_id=?”,@obra.id],:joins=>“as f left join categorias as c on
f.categoria_id=c.id”, :order=>“c.categoria”)

Funciona, pero quería saber si hay más maneras, alguna palabra mágica
que haga todo ésto y sea más sencillo, muchas gracias

On 8/8/07, Miguel Angel Calleja Lázaro [email protected] wrote:

Es la primera vez que hago un join en ruby, ojeando lo primero que he
encontrado he hecho ésto:
@fotos=Foto.find(:all,:select=>“f.id,f.hidden,f.titulo,f.foto_grande,f.foto_peq,f.obra_id,f.descripcion,f.tipo,f.categoria_id,c.categoria”,
:conditions=>[“f.hidden=0 and f.tipo=0 and
f.obra_id=?”,@obra.id],:joins=>“as f left join categorias as c on
f.categoria_id=c.id”, :order=>“c.categoria”)

Funciona, pero quería saber si hay más maneras, alguna palabra mágica
que haga todo ésto y sea más sencillo, muchas gracias

Seguro que sí :wink:

@fotos = Foto.find(:all, :conditions => {:hidden => 0, :tipo => 0,
:obra_id => @obra.id}, :order => ‘categorias.categoria’, :include =>
:categorias)

Aunque las condiciones que estás aplicando parecen más lógica de
negocios… por lo que se podría hacer:

– app/models/foto.rb
class Foto < …
def self.visible(*args)
find(:all, (args[:conditions] || {}).merge({:hidden => 0, :tipo =>
0}), :order => ‘categorias.categoria’, :include => :categorias)
end
end

Entonces el uso:

@fotos = Foto.visible

Ahora bien, te falta el “filtro” por obra, pero varios recomiendan
usar las asociaciones, es más semántico:

@fotos = @obra.fotos.visible

(esto suponiendo que está definido el has_many :fotos en Obra)

Saludos!

Damian J. escribió:

Funciona, pero quería saber si hay más maneras, alguna palabra mágica
Aunque las condiciones que estás aplicando parecen más lógica de
Entonces el uso:
Saludos!


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es

Si, la relación has_many está creada, muchas gracias por tu ayuda