在模型实例方法中使用 Geokit-Rails 时出错
Error while using Geokit-Rails in model instance method
我正在尝试在模型实例方法中使用 geokit-rails' .within 辅助方法。看这里:
def self.crunch
users = User.all
users.each do |user|
last_movement = Movement.where(user_id: user.id).try(:last)
if last_movement
users_near = Movement.where("user_id != ?", user.id).within(5, :origin => last_movement.user_lat, last_movement.user_lng)
else
next
end
if users_near.first
users_near.each do |near|
#Make sure they don't exist in MB table
#Check for interests
end
end
end
end
当我尝试 运行 方法时,我一直收到错误消息:"SyntaxError: /Users/arsood/Documents/Consulting/SweetGlue_Service/app/models/matchbox.rb:10: syntax error, unexpected ')'"
第 10 行是:
users_near = Movement.where("user_id != ?", user.id).within(5, :origin => last_movement.user_lat, last_movement.user_lng)
当我删除该行时,它工作正常。我需要用不同的方式在模型而不是控制器内部调用 Geokit 方法吗?
我认为关键是 origin 需要一个点或一个经纬度数组,你传递了 2 个参数所以 synatx 是错误的
这应该没有问题
users_near = Movement.where("user_id != ?", user.id).within(5, :origin => [last_movement.user_lat, last_movement.user_lng])
请允许我对您的代码添加一些注释
where
始终是 return 一个活动记录关系,并且 运行 last
如果没有,则 return nil记录,不用try
Movement.where(user_id: user.id).last
如果你正在使用 rails 4,有一个很好的 not
活动记录方法,
所以您可以将查询更改为类似这样的内容
Movement.where.not(user_id: user.id).within(5, origin: [last_movement.user_lat, last_movement.user_lng])
如果您添加一个 return 点数组的实例方法,那将很有帮助
class Movement < ActiveRecord::Base
def point
[ user_lat, user_lng ]
end
end
查询会更简单
users_near = Movement.where.not(user_id:user.id).within(5, origin: last_movement.point)
我不确定用户循环的作用,但我认为它可以改进,如果你解释它的目的我也可以帮助它。
我正在尝试在模型实例方法中使用 geokit-rails' .within 辅助方法。看这里:
def self.crunch
users = User.all
users.each do |user|
last_movement = Movement.where(user_id: user.id).try(:last)
if last_movement
users_near = Movement.where("user_id != ?", user.id).within(5, :origin => last_movement.user_lat, last_movement.user_lng)
else
next
end
if users_near.first
users_near.each do |near|
#Make sure they don't exist in MB table
#Check for interests
end
end
end
end
当我尝试 运行 方法时,我一直收到错误消息:"SyntaxError: /Users/arsood/Documents/Consulting/SweetGlue_Service/app/models/matchbox.rb:10: syntax error, unexpected ')'"
第 10 行是:
users_near = Movement.where("user_id != ?", user.id).within(5, :origin => last_movement.user_lat, last_movement.user_lng)
当我删除该行时,它工作正常。我需要用不同的方式在模型而不是控制器内部调用 Geokit 方法吗?
我认为关键是 origin 需要一个点或一个经纬度数组,你传递了 2 个参数所以 synatx 是错误的
这应该没有问题
users_near = Movement.where("user_id != ?", user.id).within(5, :origin => [last_movement.user_lat, last_movement.user_lng])
请允许我对您的代码添加一些注释
where
始终是 return 一个活动记录关系,并且 运行last
如果没有,则 return nil记录,不用try
Movement.where(user_id: user.id).last
如果你正在使用 rails 4,有一个很好的
not
活动记录方法, 所以您可以将查询更改为类似这样的内容Movement.where.not(user_id: user.id).within(5, origin: [last_movement.user_lat, last_movement.user_lng])
如果您添加一个 return 点数组的实例方法,那将很有帮助
class Movement < ActiveRecord::Base def point [ user_lat, user_lng ] end end
查询会更简单
users_near = Movement.where.not(user_id:user.id).within(5, origin: last_movement.point)
我不确定用户循环的作用,但我认为它可以改进,如果你解释它的目的我也可以帮助它。