2009-05-21 8 views
0

J'essaie d'afficher tous les résidents sur un pdf et leurs dépendants, mais les personnes à charge n'ont pas de stand, ils sont identifiés par la clé étrangère user_id du résident. par exemple resident1.id = 5 --- depends3.user_id = 5 mean dependent3 appartient à resident1, et donc si je veux afficher le stand dépendant, que dois-je faire et je voudrais afficher tous les résidents et leurs dépendants et les informations sur le stand pour les personnes à charge d'être l'information sur le stand du résident auquel appartient la personne à charge. maintenant mes informations devrait être à l'intérieur d'un hachage de sorte qu'il peut générer mon fichier pdf ..Faire une instruction if dans un hachage dans un modèle

mon code est

data = [] c = 1 residents.each do | r | données < < {"Nom complet" => r.firstname, "Lastname" => r.lastname, "numéro de rue" => r.stand.street_no, "nom de rue" => r.stand.streetname} si r .stand || r.user_id = r.id fin

rappeler à ma charge et les résidents sont dans la même table, mais les résidents n'ont pas la personne à charge clé user_id foreigh ne l'avoir.

et ma sortie n'affiche que les informations des résidents qui ont des stands pas les personnes à charge.

s'il vous plaît quelqu'un qui est prêt à help.cause je ne sais pas si je peux, mais une instruction if dans un hachage comme:

residents.each do | r | données < < {"Nom complet" => r.firstname, "Lastname" => r.lastname} si r.stand || r.user_id = {r.id "Street-Number" => r.stand.street_no, "Nom de la rue" => r.stand.streetname}

Répondre

1

En supposant que .stand.street_no, etc. est valide même si .stand est false (car il pourrait êtrefalse et encore appelé si la partie r.user_id == r.id est vrai), alors ce qui suit fonctionnerait:

data = residents.map do |r| 
    hash = { "Fullname" => r.firstname, "Lastname" => r.lastname } 
    hash.merge!({ "Street-Number" => r.stand.street_no, "street Name" => r.stand.streetname}) if r.stand || r.user_id == r.id 
    hash 
end 

Explication:

  1. Effectuez une itération sur chaque objet résident et créez un hachage contenant des valeurs que nous savons utiliser.
  2. Conditionnellement merge! dans les clés supplémentaires si la clause if est vraie.
  3. Retourne le hachage.

Faire cela dans un map élimine la nécessité de Prédéclarer le tableau data, ni pousser le hachage sur chaque passage dans la boucle.

0
data = [] 
residents.each do |r| 
    tmp_hash = {"Fullname" => r.firstname, "Lastname" => r.lastname} 

    if r.stand || r.user_id = r.id 
    tmp_hash.merge({"Street-Number" => r.stand.street_no, "street Name" => r.stand.streetname}) 
    end 

    data << tmp_hash 

end 
Questions connexes