2010-10-31 5 views
0

Quand je juste la méthode to_json il semble ignorer toutes les autres options ... des idées comment résoudre ce problème?rails to_json ne pas suivre scropes

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

J'essaie de brancher des points de JSON sur une carte Google, mais on a remarqué des points ne se sont plus petits avec l'un de mes champs d'application. où, l'ordre, la limite ...

Je pourrais mettre une limite (5) et il retournerait toujours 1000 enregistrements indépendamment.

Le contrôleur ressemble à ceci:

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

avez-vous remplacer la méthode serializable_hash ou to_json? – shingara

+0

non ... je n'ai pas touché l'un ou l'autre. – holden

Répondre

1

Je ne sais pas comment to_json adopte un comportement des collections qui ne sont pas totalement été énumérées encore. Il est probablement un bug qui ne tient pas compte de vos champs appliqués, mais cela pourrait fonctionner mieux:

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

@location_for_map.limit(5) ne retourne pas vraiment un tableau; il retourne un objet qui représente toutes les étendues appliquées jusqu'à présent, et ne récupère réellement le tableau de résultats que lorsque vous commencez à traiter cet objet comme un tableau.

L'application de la méthode all oblige Rails à extraire les résultats immédiatement, et to_json sait probablement mieux comment travailler avec le tableau réel que l'objet réservé. (Tout ce que je suppose, mais essayez-le, peu importe.) Cela vaut la peine de voir s'il y a un rapport de bogue pour le moment et, sinon, d'en déposer un.

+0

ouais, j'ai tout essayé au début car j'ai déjà fait ce tour, mais ça n'a pas semblé faire la différence. @ location_for_map.size renvoie toujours correctement. – holden

+0

j'ai compris le problème. c'était quelque chose sans rapport avec la façon dont je mettais à jour les résultats. – holden

Questions connexes