簡體   English   中英

在模型實例方法中使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM