ruby-on-rails – 不存在地理编码器距离方法
发布时间:2020-12-16 19:02:44 所属栏目:百科 来源:网络整理
导读:我正在使用Ryan Bates在第273 http://railscasts.com/episodes/273-geocoder?view=asciicast集中介绍的Ruby的地理编码器宝石.在那一集中,他使用以下内容搜索半径50公里范围内的对象(尽管他使用的是位置模型,我使用的是用户模型). @users = User.near(params[
我正在使用Ryan Bates在第273
http://railscasts.com/episodes/273-geocoder?view=asciicast集中介绍的Ruby的地理编码器宝石.在那一集中,他使用以下内容搜索半径50公里范围内的对象(尽管他使用的是位置模型,我使用的是用户模型).
@users = User.near(params[:search],50,:order => :distance) 当我在带有postgres的Rails 4应用程序上运行此代码时,它说 PG::Error: ERROR: column users.distance does not exist 在Ryan的演示应用程序(代码为https://github.com/railscasts/273-geocoder/tree/master/siteseer-after)中,他的位置模型上没有距离列(因为我的用户模型没有它)所以我认为距离是由Geocoder gem提供的.但是,查看地理编码器http://rdoc.info/github/alexreisner/geocoder/master/frames的文档,没有距离方法,所有其他类似距离的方法都会产生相同的错误. 有谁知道我如何通过距离在该查询中订购结果? 更新 nearbys = Place.near("Omaha,NE",:order => "distance") bearing = nearbys.first.bearing # => 46.12 Geocoder::Calculations.compass_point( bearing) # => "NE" 更新 这是生成的sql ActionView::Template::Error (PG::Error: ERROR: column users.distance does not exist LINE 1: ...ngitude) * PI() / 180 / 2),2))) <= 50) ORDER BY "users".di... ^ : SELECT users.*,3958.755864232 * 2 * ASIN(SQRT(POWER(SIN((43.7058645 - users.latitude) * PI() / 180 / 2),2) + COS(43.7058645 * PI() / 180) * COS(users.latitude * PI() / 180) * POWER(SIN((-79.3687137 - users.longitude) * PI() / 180 / 2),2))) AS distance,CAST(DEGREES(ATAN2( RADIANS(users.longitude - -79.3687137),RADIANS(users.latitude - 43.7058645))) + 360 AS decimal) % 360 AS bearing FROM "users" WHERE (users.latitude BETWEEN 42.98220558444576 AND 44.429523415554236 AND users.longitude BETWEEN -80.36976846878524 AND -78.36765893121476 AND 3958.755864232 * 2 * ASIN(SQRT(POWER(SIN((43.7058645 - users.latitude) * PI() / 180 / 2),2))) <= 50) ORDER BY "users".distance ASC): 解决方法
您不必指定order :: distance,默认情况下,结果将按距离排序.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |