如何使用'each'方法从ActiveRecord对象数组中检索值数组?

时间:2013-03-12 16:15:47

标签: ruby arrays ruby-on-rails-3.2

我正在尝试使用Rails执行此非基本查询:

proj_repartitions = ProjRepartition.includes(:proj_contributions).find( proj_project.proj_charges.each{|pc| pc.proj_repartition_id} )

关键是我需要将'ids'数组传递给find方法。 我想从一组ActiveRecord对象中提取那些'ids',其中每个对象都配有'id'属性。

当我尝试使用Rails控制台时:

proj_project.proj_charges.each{|pc| pc.proj_repartition_id}

我得到与proj_project.proj_charges

完全相同的数组

我做错了什么?

=== UPDATE ===

根据答案,我的权威工作代码是

proj_project.proj_charges.collect{|pc| pc.proj_repartition_id}

3 个答案:

答案 0 :(得分:1)

而不是使用每个尝试地图或收集 - 他们应该返回一个数组。

答案 1 :(得分:1)

每个只执行每个项目的do block代码,但不“保存”返回值。

Collect和Map执行每个项目的do块代码和数组中的返回值。

希望有意义

答案 2 :(得分:1)

proj_project.proj_charges.map(&:proj_repartition_id)

简短的写作方式

proj_project.proj_charges.map{|pc| pc.proj_repartition_id}