2017-03-23 10 views
0

私はショッピングカートを扱っていますが、その中には多くの製品があります。製品は、複数の異なる会社によって販売することができます。私がしようとしているのは、ベンダーごとに1つの注文を作成できるように、企業を一意に選択することです。Rails 4 Uniqオブジェクトの選択関連するAR CollectionProxy

ハック

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

私は#pluckは、私がここで使用されなければならないものですが、私は独自に「私の会社を集め、より効率的な方法があるように持っていることを知っていますかどうかわからないんだけど" #uniqは、私は私の入札モデルには:company_idを持っていない@cart.products.pluck(:company)

を私のために働いているように見える、とどちらもいないので、それはのような提供の列に値の配列を取得するために使用されるhas_many/has_one関係

答えて

1

pluckです:あなたが行うことができ集める企業にとって @cart.products.pluck(:company_id) # => [1,2,3]

companies = @cart.products.collect(&:company).uniq

+0

恐ろしい、これは動作します..あなたがのために明確にすることができアンパサンドは何をしていますか?私はいつ、いつそれを含めないかを決して知らなかった。 – gemart

+0

確かです。これは '@ cart.products.collect(&:company.to_proc)'の短縮形です。これは、 '@cart.products.collect {| prod | prod.company} '。これは 'to_proc'メソッドを実装または継承するオブジェクトに対してのみ機能します。ここで大きな説明があります:http://stackoverflow.com/questions/1217088/what-does-mapname-mean-in-ruby – Krzysztof

関連する問題