Я написал функцию в своем приложении Rails, которая не проходит проверку на запах, и я не знаю, как провести рефакторинг.
В настоящее время пользователь может ввести адрес в форму, и моя цель — указать все компании по доставке, которые находятся в пределах заданного радиуса доставки. Прямо сейчас это выглядит так:
class Dealers < ActiveRecord::Base
validates :name, presence: true
validates :delivery_radius, numericality: { only_integer: true }
end
поэтому в мой контроллер входит поиск, и я вызываю метод, который я написал (available_deliveries
), следующим образом:
@dealers = Dealer.available_deliveries(Geocoder.coordinates(search_params))
search_params
— это просто улица, город и штат.
мой метод Dealer#available_deliveries
выглядит так:
def self.available_deliveries(geo)
dealers = []
Dealer.all.each do |dealer|
if dealer.distance_from(geo) <= dealer.delivery_radius
dealers << dealer
end
end
dealers
end
YIKES это некрасиво. Я не уверен, как сделать оператор where
SQL, чтобы получить те же результаты...
distance_from
? - person alexsmn   schedule 09.07.2014distance_from
— это метод Geocoder, который делает следующее:obj.distance_from([40.714,-100.234]) # distance from arbitrary point to object
- person Anthony   schedule 09.07.2014