首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby地理编码器Mysql2语法错误

Ruby地理编码器Mysql2语法错误
EN

Stack Overflow用户
提问于 2011-11-17 21:55:01
回答 1查看 424关注 0票数 0

使用Rails 3.1。我使用的是Ruby地理编码器(不是geokit)、will_paginate和Mysql2 gem。下面是我的源码:

代码语言:javascript
复制
class ShopsController < ApplicationController
  def nearby
    @shop = Shop.find(params[:id])
    @nearby_shops = @shop.nearbys(20).paginate(:page => params[:page], :per_page => 20)
  end
  ...
end

# nearby.html.erb
<% @nearby_shops.each do |nearby_shop| %>
<p><%= nearby_shop.name %></p>
<% end %>
<%= will_paginate @nearby_shops %>

我在<% @nearby_shops.each do |nearby_shop| %>上得到了以下Mysql语法错误

代码语言:javascript
复制
Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*, 3958.755864232 * 2 * ASIN(SQRT(POWER(SIN((48.858334 - lat) * PI() / 180 / 2),' at line 1: SELECT COUNT(*) AS count_all, *, 3958.755864232 * 2 * ASIN(SQRT(POWER(SIN((48.858334 - lat) * PI() / 180 / 2), 2) + COS(48.858334 * PI() / 180) * COS(lat * PI() / 180) * POWER(SIN((2.294254 - lng) * PI() / 180 / 2), 2) )) AS distance, CAST(DEGREES(ATAN2( RADIANS(lng - 2.294254), RADIANS(lat - 48.858334))) + 360 AS decimal) % 360 AS bearing, shops.id,shops.shop_type,shops.name,shops.shop_subtype,shops.operation_hours,shops.check_in,shops.check_out,shops.season,shops.prices,shops.country,shops.postal_code,shops.administrative_area_level_1,shops.administrative_area_level_2,shops.formatted_address,shops.contact,shops.email,shops.web,shops.description,shops.reviews_count,shops.rating_average,shops.lat,shops.lng,shops.created_at,shops.updated_at,shops.photos_count,shops.provider,shops.provider_price,shops.provider_ref,shops.continent,shops.directions,shops.street_address,shops.route,shops.intersection,shops.political,shops.administrative_area_level_3,shops.colloquial_area,shops.locality,shops.sublocality,shops.neighborhood,shops.premise,shops.subpremise,shops.natural_feature,shops.airport,shops.park,shops.post_box,shops.street_number,shops.floor,shops.room AS shops_id_shops_shop_type_shops_name_shops_shop_subtype_shops_operation_hours_shops_check_in_shops_check_out_shops_season_shops_prices_shops_country_shops_postal_code_shops_administrative_area_level_1_shops_administrative_area_level_2_shops_formatted_addre FROM `shops`  WHERE (lat BETWEEN 48.5688704337783 AND 49.1477975662217 AND lng BETWEEN 1.8542883270272932 AND 2.734219672972707 AND shops.id != 1) GROUP BY shops.id,shops.shop_type,shops.name,shops.shop_subtype,shops.operation_hours,shops.check_in,shops.check_out,shops.season,shops.prices,shops.country,shops.postal_code,shops.administrative_area_level_1,shops.administrative_area_level_2,shops.formatted_address,shops.contact,shops.email,shops.web,shops.description,shops.reviews_count,shops.rating_average,shops.lat,shops.lng,shops.created_at,shops.updated_at,shops.photos_count,shops.provider,shops.provider_price,shops.provider_ref,shops.continent,shops.directions,shops.street_address,shops.route,shops.intersection,shops.political,shops.administrative_area_level_3,shops.colloquial_area,shops.locality,shops.sublocality,shops.neighborhood,shops.premise,shops.subpremise,shops.natural_feature,shops.airport,shops.park,shops.post_box,shops.street_number,shops.floor,shops.room HAVING 3958.755864232 * 2 * ASIN(SQRT(POWER(SIN((48.858334 - lat) * PI() / 180 / 2), 2) + COS(48.858334 * PI() / 180) * COS(lat * PI() / 180) * POWER(SIN((2.294254 - lng) * PI() / 180 / 2), 2) )) <= 20

如果我删除了分页,它不会有任何问题,但列表当然是一个完整的项目列表。

你知道该怎么做来解决这个问题吗?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2011-11-17 23:20:57

这被证明是ActiveRecord/Geocoder中的一个bug,我的Ruby geocoder gem使用了这个分支来解决所有问题:

代码语言:javascript
复制
gem 'geocoder', :git => 'git://github.com/alexreisner/geocoder.git', :branch => 'no_grouping'

按照这里的讨论进行操作:

https://github.com/alexreisner/geocoder/issues/86

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8168245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档