2010-10-31 3 views
0

Когда я просто метод to_json, кажется, игнорирует все другие варианты ... любые идеи, как это исправить?rails to_json не соответствует scropes

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

Я пытаюсь подключить точки из JSON на карте Google, но заметил, что точки не получили меньше ни с одной из моих областей. где, порядок, предел ...

Я мог бы установить предел (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 
+0

Вы переопределите метод serializable_hash или to_json? – shingara

+0

нет ... я не коснулся ни одного из них. – holden

ответ

1

Я не знаю, как to_json ведет себя на собраниях, которые не в полной мере были перечислены еще. Это, вероятно, ошибка, что он игнорирует вашу прикладную области действия, но это может работать лучше:

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

@location_for_map.limit(5) фактически не возвращает массив; он возвращает объект, который представляет все области применения, применяемые до сих пор, и только на самом деле извлекает массив результатов, когда вы начинаете обрабатывать этот объект, как массив.

Применение метода all вынуждает Rails немедленно отображать результаты, а to_json, вероятно, лучше знает, как работать с фактическим массивом, чем объект-заполнитель. (Все мое предположение, но дайте ему возможность, независимо.) Возможно, стоит посмотреть, есть ли еще отчет об ошибке, и, если нет, подавать его.

+0

Да, я пробовал все в начале, так как раньше я сталкивался с этим трюком, но, похоже, это не изменило ситуацию. @ location_for_map.size всегда возвращается правильно. – holden

+0

Я понял проблему. это было что-то не связанное с тем, как я обновлял результаты. – holden

Смежные вопросы