![](/img/trans.png)
[英]undefined method 'merge_conditions' for 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:語法錯誤,意外的')'
第10行是:
users_near = Movement.where("user_id != ?", user.id).within(5, :origin => last_movement.user_lat, last_movement.user_lng)
當我刪除該行時,它工作正常。 我需要在模型而不是控制器內調用Geokit方法的其他方法嗎?
我認為關鍵是原點需要點或lat和lng的數組,您傳遞了2個參數,所以synatx是錯誤的
這應該沒有問題
users_near = Movement.where("user_id != ?", user.id).within(5, :origin => [last_movement.user_lat, last_movement.user_lng])
請允許我在您的代碼上添加一些注釋
where
總是返回一個活動的記錄關系,如果沒有記錄, last
運行將返回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])
如果您添加了一個實例方法,該方法返回的點數組將很有幫助
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)
我不確定用戶循環的作用,但是我認為它可以改進,如果您解釋它的作用,我也可以提供幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.