Ich bekomme ein Array mit Objekte. Ein person
kann mehrere houses
haben:Kürzen Mapping und concat
person.houses => ActiveRecord_Associations_CollectionProxy
Einige Häuser zu mehreren persons
gehören. In meinem Code möchte ich alle eindeutigen houses
für die Personen erhalten, die in dem Array sind.
Dies ist eine lange Version des Codes:
def persons_houses(persons)
unique_houses = []
persons.each do |person|
person.houses.each do |house|
unique_houses << house if !unique_houses.include? house
end
end
unique_houses
end
Kennen Sie einen kürzeren Code für diese persons_houses(persons)
Methode?
ich Häuser des Abbildens der Personen zu denken, concat sie zur gleichen Zeit und dann eindeutige Werte zurückgeben
So etwas wie: (Aber das ist nicht gültig Ruby ist)
persons.map { |person| concat(person.houses) }.uniq
Vielen Dank für Eure Hilfe!
Dies fühlt sich an, als sollte es in der Datenbankabfrage geschehen, nicht in einem Ruby-Array. Verstehe ich richtig, dass Sie eine Viele-zu-Viele-Beziehung zwischen Haus und Person haben? Wenn ja, wird es als has_and_belongs_to_many oder has_many: through implementiert? – moveson