[英]Filtering with geokit rails - dosent show any data
我正在使用Ruby On Rails構建用於webbapp的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
方法將失敗,並沒有查詢將被執行。 因此,空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&lng=12.973509
。
注意:
將lng
作為單獨的query param
傳遞, &
前綴為&lng
而不是?lng
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.