tengo 2 relacionados modelos carrilesrieles combinación interna combinada con la gema geocodificación
class Location < ActiveRecord::Base
has_many :rates
geocoded_by ....
end
class Rate < ActiveRecord::Base
belongs_to :location
end
que estoy usando la gema geocodificador - http://www.rubygeocoder.com
Quiero encontrar todas las tarifas con un pair
atributo particular que están dentro de una cierta distancia al usuario.
En SQL, lo haría una combinación interna en las tasas
SELECT * FROM rates INNER JOIN locations ON rates.location_id=locations.id;
Entonces, insertar un donde la condición que va a filtrar en el atributo de par, y luego utilizar el método cerca de la Geocoder en la tabla resultante (la cerca método funciona insertando una condición where en la consulta que calcula la distancia utilizando los atributos de latitud y longitud en la ubicación) para seleccionar solo las filas dentro de la distancia correcta
¿Cómo puedo hacer esto en los rieles? Probé
rates = Rate.joins(:locations)
me sale
ActiveRecord::ConfigurationError: Association named 'locations' was not found; perhaps you misspelled it?
quiero hacer esto
rates = Rate.joins(:locations).near(my_latitude, my_longitude, distance).where(:rates => {:pair => 'xxxx'})
pero consigo
undefined method `near' for #<ActiveRecord::Relation:0xa075ff8>
Puesto que es un belongs_to, creo que ': locations' tiene que ser singular. No estoy seguro de si esto funcionará, pero es posible que necesite reordenar un poco sus llamadas a los métodos. Depende de cómo funciona la gema con ARel. 'Rate.near (my_latitude, my_longitude, distance) .join (: location) .where (: rates => {: pair => 'xxxx'})' – agmcleod