代码之家  ›  专栏  ›  技术社区  ›  holden

rails到json不跟随scropes

  •  0
  • holden  · 技术社区  · 14 年前

    var places = <%=raw @location_for_map.limit(5).to_json(:only => [:name, :lat, :lng]) %>;
    

    我试图从google地图上的json中插入点,但是注意到这些点在我的任何范围内都没有变小。哪里,命令,限制。。。

    我可以设置一个限制(5),它仍然会返回1000条记录。

    sort = case params[:sort]
           when "name" then session[:sort] = "name"
           when "min_price" then session[:sort] = "min"
           when "avg_price" then session[:sort] = "cache_price"
           when "rating" then session[:sort] = "cache_rating DESC NULLS LAST"
           end
    
    @locations = Location.find(params[:id])       
    @base = @locations.places.active
    
    #@location_for_map = @locations.places.limit(5)
    
    unless params[:tags].blank?
      @base = @base.tagged_with(params[:tags])
    end
    
    unless params[:price_high].blank?
      price_high = (params[:price_high].to_f * Currency.rate(params[:currency]))
      price_low = (params[:price_low].to_f * Currency.rate(params[:currency]))
      @base = @base.where("cache_price BETWEEN ? AND ?",price_low,price_high)
    end
    
    @base = @base.order(session[:sort])
    
    #@location = @locations.places.active.paginate :page => params[:page]
    @location = @base.paginate :page => params[:page]
    @location_for_map = @base
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   Matchu    14 年前

    我不知道怎么做 to_json 对尚未完全枚举的集合执行操作。它可能会忽略应用的作用域,这可能是一个错误,但这样做可能会更好:

    @location_for_map.limit(5).all.to_json(:only => [:name, :lat, :lng])
    

    @location_for_map.limit(5) 实际上不返回数组;它返回一个对象,该对象表示迄今为止应用的所有作用域,并且仅当您开始将该对象视为数组时才实际获取结果数组。

    应用 all 方法强制Rails立即获取结果,并且 可能比占位符对象更了解如何使用实际数组。(我猜都是,不过不管怎样,还是试试吧)也许值得一看是否有bug报告,如果没有的话,可以提交一份。