Ошибка синтаксиса Ruby Geocoder Mysql2 - PullRequest
0 голосов
/ 17 ноября 2011

Использование Rails 3.1. Я использую геокодер Ruby (не geokit), will_paginate и Mysql2. Ниже приведены мои исходные коды:

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 %>

Я получил следующую синтаксическую ошибку Mysql на <% @nearby_shops.each do |nearby_shop| %>:

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

Если бы я удалил нумерацию страниц, это не доставило бы никаких проблем, но список, конечно, представляет собой полный список элементов.

Есть идеи, что можно сделать, чтобы это исправить? Благодаря.

1 Ответ

2 голосов
/ 17 ноября 2011

Оказалось, что это ошибка в ActiveRecord / Geocoder, использовала эту ветку для моего гема Ruby geocoder для решения всех проблем:

gem 'geocoder', :git => 'git://github.com/alexreisner/geocoder.git', :branch => 'no_grouping'

Следите за обсуждением здесь:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...