2012-01-08 2 views
1

Я пытаюсь делать то, что описано здесь: http://freelancing-god.github.com/ts/en/geosearching.htmlДумая Sphinx - geosearching с has_one полиморфной ассоциации

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

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 

, но я получаю колонку Неизвестно в полевом списке ...

Что я делаю неправильно?

ответ

1

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

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

это выглядит вы сделали неправильно введенную опечатку: (как вы написали, вы не должны «место», то есть «locationable»)

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 

и убедитесь, что у вас есть Лат LNG столбцы в таблице «локаций» (модель Location)

+0

Да, я попробовал это изначально - и снова попытался, и это тоже не сработало. Я сомневался, что это сработает, потому что, читая документы сфинкса, кажется, что когда вы делаете что-то вроде: «RADIANS (locationable.lat)», он будет говорить напрямую с базой данных (без рубинов/рельсов), и нет такого вещь, доступная, насколько известно базе данных, - это волшебная рельсовая вещь. Фактическое имя таблицы - «местоположения», поэтому кажется, что sphinx должен ссылаться на это, нет? – patrick

+0

Возможно, вам придется добавить некоторые данные из-за полиморфных отношений. – mustafaturan

Смежные вопросы