On 10/30/07, Diego Algorta Casamayou <[EMAIL PROTECTED]> wrote:
> Para que se hagan una idea... Esta parece ser una solución usando find_by_sql:
>
> class AcademicProgram < ActiveRecord::Base
>   belongs_to :location
>
>   def self.related_locations
>     Location.find_by_sql("SELECT DISTINCT l.* FROM academic_programs p
> LEFT JOIN locations l ON p.location_id = l.id")
>   end
> end
>
> Entonces puedo hacer esto en el controller:
>
> AcademicProgram.related_locations.map(&:name)
>
> Y con eso obtengo un Array con los nombres de las locations que tienen
> al menos un academic_program.
>
> Pero me gustaría saber si alguien conoce otra solución. Mejor si no
> usa find_by_sql.

La que te pasé antes ;)

The Rails Way pareciera ser agregar el counter_cache a locations. Le
ponés el campo academic_programs_count a locations, y después en el
modelo AcademicProgram:

belongs_to :location, :counter_cache => true

Y luego siempre y cuando hagas todo bien,

class Location < ...
  def self.with_academic_programs
    find(:all, :conditions => 'academic_programs_count > 0')
  end
end

PD: Usá acts_as_dropdown que te va a venir bien.
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a