2013-05-15 4 views
1

Dans ma vue, je dois afficher une liste avec le nom de chaque ville et les services disponibles dans cette zone (Services municipaux) sous chaque nom. Cela implique deux requêtes. Mais, comment puis-je les combiner et montrer cette liste simple?Comment combiner ces deux requêtes dans Rails 3?

Les modèles ...

class City < ActiveRecord::Base 
    has_many :city_services, :dependent => :delete_all 
end 

class CityService < ActiveRecord::Base 
    belongs_to :city 
end 

Le contrôleur ... C'est là que je besoin d'aide.

@county = params[:county] 
@city_ids = City.where("county = ?", @county).map { |c| c.id } 
@city_services = CityService.where(:city_id => @city_ids) 

Mais, il y a plusieurs services pour chaque ville, donc je ne peux citer que city_services ou villes seront citées à plusieurs reprises.

Répondre

2

essayez ceci (je suppose que la table des villes est appelée villes):

@city_services = CityService.joins(:city).where(cities: {country: params[:country]}) 

Si vous voulez une liste distincte:

@city_services = CityService.joins(:city).where(cities: {country: params[:country]}).uniq 
+0

Assez proche! À l'exception de plusieurs services pour chaque ville, dans les résultats de la requête, certaines villes sont répertoriées deux fois. Y a-t-il un Ruby simple que je peux utiliser pour combiner les résultats de la requête avec la même ville en un seul enregistrement, de sorte que je puisse lister les résultats dans la vue sans que certaines villes apparaissent deux fois? – ac360

+0

Par exemple cette ville a deux services et apparaît deux fois, comment puis-je combiner ces deux résultats ?: # , # ac360

+0

À quoi devrait ressembler la liste de résultats? Essayez-vous d'énumérer toutes les villes qui ont un service? Tous les services par ville? – davidrac

Questions connexes