对于ActiveRecord对象的数组,返回其属性的数组

时间:2014-07-05 18:01:49

标签: ruby-on-rails arrays activerecord ruby-on-rails-4

@matched = [1, 2, 3]

其中每个整数表示Inventory类中ActiveRecord对象的id。下一步,我想查看每个对象并获取父User的电子邮件,但我不知道该怎么做。理想情况下,我会写一些类似的东西:

Inventory.where(id: @matched).user.email

因为当然,如果我只有一个id可以查找,那么这句话就可以了。由于这不起作用,我反而这样做了

@email = []
@matched.each do |i|
   @email << Inventory.find_by_id(i).user.email
end

只是想知道是否有更简单的方法。

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您只需要电子邮件地址,则可以使用pluck方法:

Inventory.where(id: @matched).joins(:user).pluck("users.email")

答案 1 :(得分:0)

class Inventory

  def self.with_ids(ids) 
    sql = @matched.map{|id| "id = #{id}"}.join(" OR ")
    where(sql)
  end

  def parent_email
    user.email
  end
 end

Inventory.with_ids(@matched).map(&:parent_email)