2017-03-23 33 views
0

我正在处理购物车,该购物车中有许多产品。这些产品可以由多个不同的公司销售。我想要做的是选择唯一的公司,以便我可以为每个供应商创建一个订单。Rails 4选择相关的uniq对象AR CollectionProxy

黑客

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

我不知道,如果#pluck是我应该用在这里,但我知道有一定是我收集的企业更有效的方式“独特”。 #uniq似乎并没有为我工作,而且也不@cart.products.pluck(:company)

我在投标型号:company_id,这是一个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