Я работаю над приложением Rails, которое очень похоже на Twitter, которое используется для отслеживания членов команд и их обновленного статуса с помощью обновлений статуса, называемых «пингами».Твиттер называет эти статусы «твитами».
Суть приложения такова:
Сотрудник (: first_name,: last_name)
Ping (: datetime,: status,: latitude,: долгота)
Модель сотрудника:
class Employee < ActiveRecord::Base
has_many :pings
has_one :ping, :order => "created_at DESC" # Returns the lastest Ping (employee.ping)
end
Модель пинга:
class Ping < ActiveRecord::Base
belongs_to :employee
acts_as_mappable :default_units => :miles,
:default_formula => :sphere,
:distance_field_name => :distance,
:lat_column_name => :latitude,
:lng_column_name => :longitude
end
Мне нужно запросить у всех сотрудников последний пингпо текущему местоположению.Проблема в том, что я не знаю, как это сделать.
Если я ищу все пинги в текущем местоположении, я получаю несколько пингов, принадлежащих сотруднику.Затем мне нужно будет сравнить каждый ping.id с employee.ping.id , чтобы увидеть, является ли один из них ПИШЕННЫМ пингом сотрудника.
Я могуне выполняйте поиск сотрудником, поскольку информация о географическом местоположении находится в объекте Ping.И единственные пинги, которые меня волнуют, это последние.
Ping Controller
def location
pings = Ping.geo_scope(:within => params[:distance], :origin => [params[:latitude], params[:longitude]])
render :json => pings, :include => :employee, :only => [:id, :first_name, :last_name, :status, :longitude, :latitude]
# this returns all Pings that were ever created in this location.
end
Спасибо за любые отзывы и помощь!
Спасибо, Робин, за помощь.Вы вдохновили меня придумать следующее:
employees = Employee.all
current_pings = []
employees.each do |employee|
current_pings << employee.ping.id
end
pings = Ping.geo_scope(:within => params[:distance], :origin => [params[:latitude], params[:longitude]]).find_all_by_id(current_pings)
render :json => pings, :include => :employee, :only => [:id, :first_name, :last_name, :status, :longitude, :latitude, :created_at]