【问题标题】:Filtering with geokit rails - dosent show any data使用 geokit rails 过滤 - 不显示任何数据
【发布时间】:2014-03-29 22:08:04
【问题描述】:

我正在使用 Ruby On Rails 为 webbapp 构建一个 API,我正在为 API/JSON 和 Geokit 使用 Jbuilder。

我有这个模型:

广告系列

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: [ ]
}

关于我做错了什么以及如何解决这个问题的任何想法?

【问题讨论】:

标签: ruby-on-rails json ruby-on-rails-4 jbuilder geokit


【解决方案1】:

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

acts_as_mappable 位于 Venue 模型上,因此 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

此外,网址应为/api/campaigns?lat=55.563466&amp;lng=12.973509

注意:

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

【讨论】:

  • 抱歉,这是我的输入错误,但它仍然得到一个空的哈希值。
  • 再次使用您的服务器日志更新要点并告诉我。
  • 我看到了问题。你能分享触发这个请求的视图代码吗?
  • 不是索引视图。您如何到达视图:GET "/api/campaigns?lat=55.563466?lng=12.973509" 请求。这个请求是如何生成的?分享那个代码。
  • 代码在上面提供,在控制器活动和方法索引中。
猜你喜欢
  • 2018-11-11
  • 1970-01-01
  • 2020-03-02
  • 1970-01-01
  • 2018-11-27
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多