【发布时间】:2014-07-09 21:55:53
【问题描述】:
我在我的 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
哎呀,太丑了。我不确定如何执行where SQL 语句来获得相同的结果...
【问题讨论】:
-
distance_from长什么样子? -
嗨 @uhn-nohn
distance_from是一种地理编码器方法,它执行此操作:obj.distance_from([40.714,-100.234]) # distance from arbitrary point to object
标签: sql ruby-on-rails ruby activerecord rails-geocoder