Thinking Sphinx - геологоразведка с полиморфной ассоциацией has_one - PullRequest
1 голос
/ 08 января 2012

Я пытаюсь сделать то, что описано здесь: http://freelancing -god.github.com / ts / en / geosearching.html

За исключением того, что вместо столбцов широты и долготына моей модели я хочу сделать:

class Post
  has_one :location, :as => :locationable
end

class User
  has_one :location, :as => :locationable
end

class Location
  belongs_to :locationable, :polymorphic => true
end

, чтобы пользователь и публикация могли иметь записи о местоположении, заданные с помощью locationable_type и locationable_id ... Итак, я сделал следующее в своей модели Post:

define_index do
  has locationable(:id), :as => :locationable_id
  has "RADIANS(locations.lat)", :as => :latitude, :type => :float
  has "RADIANS(locations.lng)", :as => :longitude, :type => :float
end

но я получаю Неизвестный столбец в ошибке 'список полей' ...

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 08 января 2012

Я понял это .. Эта строка:

has locationable(:id), :as => :locationable_id

Предполагалось, что принудительное объединение ... но не могло, потому что не существует такой вещи, как определение местоположения для записи записи. Это имеет_одное расположение .. Так что это должно быть:

define_index do
  has location.locationable_id, :as => :locationable_id
  has "RADIANS(locations.lat)", :as => :latitude, :type => :float
  has "RADIANS(locations.lng)", :as => :longitude, :type => :float
end

и теперь это работает.

0 голосов
/ 08 января 2012

похоже вы ошиблись: (как вы писали, у вас нет 'местоположений', у вас есть 'локализуемые')

define_index do
  has locationable(:id), :as => :locationable_id
  has "RADIANS(locationable.lat)", :as => :latitude, :type => :float
  has "RADIANS(locationable.lng)", :as => :longitude, :type => :float
end

и убедитесь, что у вас есть lat, lngстолбцы в таблице местоположений (модель местоположения)

...