rails to_json不遵循scropes

时间:2010-10-31 23:47:10

标签: ruby-on-rails json ruby-on-rails-3 scope

当我只是to_json方法时,它似乎忽略了所有其他选项...任何想法如何解决这个问题?

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

我正试图在谷歌地图上插入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 个答案:

答案 0 :(得分:1)

我不确定to_json对尚未完全枚举的集合的行为如何。它可能是一个忽略你的应用范围的错误,但这可能会更好:

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

@location_for_map.limit(5)实际上并不返回数组;它返回一个对象,该对象表示到目前为止应用的所有范围,并且只有在开始像处理数组一样处理该对象时才实际获取结果数组。

应用all方法强制Rails立即获取结果,而to_json可能更好地了解如何使用实际数组而不是占位符对象。 (我的全部猜测,不管怎样,不管怎么说。)如果还有错误报告,可能值得一看,如果没有,请提交一份。