2011-04-18 4 views
3

Si j'ai les relations de modèles imbriqués suivants (tous has_many): Pays < Villes < Rues < MaisonsRails: Vérifier la présence de l'attribut imbriqué

En vue du spectacle, comment puis-je vérifier si un pays a une maisons?

Editer: Ajout de la méthode de chaînage suggérée avec la méthode map (essayez d'abord de mapper les rues). Jusqu'à présent, il est de ne pas limiter les enregistrements

<% @countries.each do |country| %> 
    <% if country.cities.map(&:streets).any? %> 
    .... 
    <% end %> 
<% end %> 
+0

'country.cities.map (&: rues) .flatten.any?' – fl00r

Répondre

2

Vous pouvez appeler ou @country.cities.map(&:streets).flatten.map(&:homes).present? ou @country.cities.map(&:streets).map(&:homes).any?

<% if @country.cities.map(&:streets).flatten.map(&:homes).flatten.any? %> 
    Tro-lol-lo yo-lo-puki 
<% end %> 

vous pouvez également envelopper cette longue ligne dans votre méthode de modèle:

class Country < ActiveRecord::Base 
    def any_homes? 
    cities.map(&:streets).flatten.map(&:homes).flatten.any? 
    end 
end 

Utilisation

<% if @country.any_homes? %> 
    Tro-lol-lo yo-lo-puki 
<% end %> 

Et bien sûr cela ressemble à une bonne structure de données pour le refactoring! Il veut être refactorisé!

+0

Salut. Cela ressemble à ça devrait marcher. Cependant, il ne coupe pas les pays sans foyer. Chaque niveau d'imbrication est lié par une connexion (belongs_to/has_many). Je vais mettre ma méthode dans mon post original. – nktokyo

+0

Je ne vous comprends pas. Il y a aussi un bug dans mon code. Je vais le réparer maintenant – fl00r

+0

Fonctionne maintenant. Merci. Je vais partir et refaire le référencement de Google pour voir si je peux comprendre ce que vous voulez dire. Je vous remercie. – nktokyo

Questions connexes