使用以下配置在关联模型上定义索引的正确方法是什么?
我的模型Locality
包含lat
和lng
属性以及相关模型Profile
和User
class User < ActiveRecord::Base
has_one :user_profile
define_index do
# This doesn't work :(
has "RADIANS(user_profiles.localities.lat)", :as => :lat, :type => :float
has "RADIANS(user_profiles.localities.lng)", :as => :lng, :type => :float
end
end
end
class UserProfile < ActiveRecord::Base
belongs_to :user
belongs_to :locality
end
class Locality < ActiveRecord::Base
has_many :user_profiles
end
我需要为User模型定义索引,以便我可以对它进行地理搜索。
感谢您的回答!
答案 0 :(得分:10)
问题是双重的:
以下应该可以解决问题:
define_index do
# force the join on the associations
join user_profile.locality
# normal SQL:
has "RADIANS(localities.lat)", :as => :lat, :type => :float
has "RADIANS(localities.lng)", :as => :lng, :type => :float
end
Claudio在SQL中使用单一引用的观点是不正确的 - 在SQL中,您需要表名。但是你确实想要在连接调用中使用正确的关联引用(因此它们在那里是单数的)。
干杯
答案 1 :(得分:1)
真的不知道确切的解决方案,但是:
你有一个错字:
has_one :user_profile
define_index do
# This doesn't work :(
has "RADIANS(user_profiles.localities.lat)", :as => :lat, :type => :float
您对该属性使用“user_profiles”,它不应该是复数,请尝试将其更改为:“user_profile”。
我再说一遍,我不知道你是否可以浏览这个案件的协会,但如果可以的话,这应该是一个错字。
您可以在此处阅读以获取更多信息:http://freelancing-god.github.com/ts/en/geosearching.html