2017-03-23 5 views
0

Ich habe es mit einem Einkaufswagen, der viele Produkte enthält. Die Produkte können von mehreren verschiedenen Firmen verkauft werden. Was ich versuche, ist die eindeutige Auswahl der Firmen, so dass ich eine Bestellung pro Verkäufer erstellen kann.Schienen 4 Auswahl uniq Objekte bezogen AR CollectionProxy

der Hack

companies = [] 
@cart.products.each { |p| companies << p.company } 
companies.uniq 
#create order for each company 

Ich bin mir nicht sicher, ob #pluck etwas, das ich hier verwenden sollten, aber ich weiß, dass es eine effizientere Art und Weise zu sammeln mein Unternehmen hat einen guten „eindeutig sein ". #uniq nicht für mich zu arbeiten scheint, und auch nicht @cart.products.pluck(:company)

Ich habe keine :company_id in meinem Bid-Modell, es ist eine has_many/has_one Beziehung

Antwort

1

pluck wird für das Abrufen von Array von Werten in bereitgestellt Spalt verwendet wie : @cart.products.pluck(:company_id) # => [1,2,3]

zum Sammeln Unternehmen Sie companies = @cart.products.collect(&:company).uniq

+0

ehrfürchtig tun können, das funktioniert .. können Sie klären ich was das kaufmännische Und macht? Ich habe nie wirklich gewusst, wann und wann es nicht aufgenommen wurde. – gemart

+0

Sicher Sache. Es ist eine Abkürzung für '@ cart.products.collect (&: company.to_proc)'. Dies entspricht ä@cart.products.collect {| prod | prod.company} '. Dies funktioniert nur für Objekte, die die Methode 'to_proc' implementieren oder erben. Es gibt eine gute Erklärung hier: http://stackoverflow.com/questions/1217088/what-does-mapname-mean-in-ruby – Krzysztof

Verwandte Themen