过滤与geokit轨道-不显示任何数据



我正在使用Ruby On Rails为webapp构建API,我正在使用Jbuilder用于API/JSON和Geokit。

我有这些模型:

竞选

class Campaign < ActiveRecord::Base
    belongs_to :company
    belongs_to :venue
    belongs_to :category
    has_and_belongs_to_many :venues
    has_many :cities, through: :venues
    has_many :uses
end
公司

class Company < ActiveRecord::Base
  has_many :venues
  has_many :campaigns
  validates :name, presence: true
end

class Venue < ActiveRecord::Base
    acts_as_mappable :default_units => :kms,
                     :lat_column_name => :lat,
                     :lng_column_name => :lng
    belongs_to :company
    belongs_to :city
    has_and_belongs_to_many :campaigns
end

我正在尝试通过给定的纬度和经度坐标列出所有活动,像这样:

class API::CampaignsController < ApplicationController
    respond_to :json
    def index
        @campaigns = filter
        respond_with @campaigns
    end
    def filter
        if params[:city_id]
            Campaign.includes(:venues, :cities).where('cities.id' => params[:city_id])
        elsif params[:lat] && params[:lng]
            lat = params[:lat].to_f
            lng = params[:lng].to_f
            Campaign.includes(:venues, :cities).within(10, :origin => [lat, lng])
        end
    end
end

但是我得到的是一个空散列:

{
campaigns: [ ]
}

我做错了什么,我怎么能解决这个问题的任何想法?

根据服务器日志,GET "/api/campaigns?lat=55.563466?lng=12.973509",您没有通过params[:city_id],因此filter方法中的BOTH条件将失败,不会执行任何查询。因此,清空campaigns

acts_as_mappableVenue模型上,因此within仅适用于该模型。我认为你想要的filter方法如下:

  def filter
    if params[:city_id]
      Campaign.includes(:venues, :cities).where('cities.id' => params[:city_id])
    elsif params[:lat] && params[:lng]
      lat = params[:lat].to_f
      lng = params[:lng].to_f
      Venue.within(10, :origin => [lat, lng]).includes(:campaigns, :city).each do |venue|
        campaigns << venue.campaigns  
      end
      campaigns
    end
  end

url也应该是/api/campaigns?lat=55.563466&lng=12.973509

注意:

lng作为单独的query param传递,&前缀为&lng,而不是?lng

相关内容

  • 没有找到相关文章

最新更新