2009-05-21 14 views
0

Ich versuche, alle Bewohner auf einem PDF-und ihre Angehörigen anzuzeigen, aber die Angehörigen haben keinen Stand sie werden durch den Fremdschlüssel user_id des Bewohners identifiziert. zB resident1.id = 5 --- dependent3.user_id = 5 mittelabhängig3 gehört zu resident1, und wenn ich also den abhängigen Stand anzeigen möchte, was soll ich tun und ich möchte alle Bewohner und ihre Angehörigen und die Standinformationen anzeigen lassen Für Angehörige sollen die Standinformationen des Bewohners der abhängigen sein. jetzt meine Informationen sollten in einem Hash sein, damit es meine pdf-Datei erzeugen kann ..Eine if-Anweisung in einem Hash in einem Modell

meinen Code

data = [] c = 1 residents.each tun ist, | r | data < < {"Fullname" => r.vorname, "Nachname" => r.lastname, "Street-Nummer" => r.stand.street_no, "street Name" => r.stand.streetname} if r .stand || r.user_id = r.id Ende

dem meiner Angehörigen erinnern und Bewohner in der gleichen Tabelle sind aber die Bewohner haben nicht die user_id foreigh Schlüssel nur die abhängig davon haben.

und meine Ausgabe nur die Informationen der Bewohner anzeigen, die nicht die Angehörigen hat.

bitte jemand, der bereit ist help.cause ich weiß nicht, ob ich das kann aber eine if-Anweisung in einem Hash wie:

residents.each tun | r | Daten < < {"Fullname" => r.vorname, "Nachname" => r.lastname} if r.stand || r.user_id = r.id { "Street-Nummer" => r.stand.street_no, "Straßenname" => r.stand.streetname}

Antwort

1

Unter der Annahme, dass .stand.street_no usw. gilt selbst wenn .stand ist false, dann würde die folgende arbeiten (da es false und nach wie vor, wenn der r.user_id == r.id Teil ist wahr genannt werden könnte):

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 

Erläuterung:

  1. Iterieren Sie durch jedes residente Objekt und erstellen Sie einen Hash, der Werte enthält, von denen wir wissen, dass sie verwendet werden.
  2. Bedingt merge! in den zusätzlichen Tasten, wenn die if-Klausel wahr ist.
  3. Geben Sie den Hash zurück.

tun dies in einer map beseitigt die Notwendigkeit, die data Array predeclare, noch den Hash-Push an jeder durch die Schleife.

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 
Verwandte Themen