#<Page::ActiveRecord_Associations_CollectionProxy:0x007f4723af2208> 的未定义方法 'id'

undefined method 'id' for #<Page::ActiveRecord_Associations_CollectionProxy:0x007f4723af2208>

我不知道我在 Rails 控制台中进行的查询发生了什么。我是 运行ning Rails 4.1.5。首先我得到一组项目:

页数 = Item.item_steps.map {|item| item.pages}

一旦我有了这些页面,我就会找出 class:

pages.class
#array

所以,我现在有了一个数组。很简单,因为我知道有很多方法可以在数组上 运行 。但是,当我对 pages 数组执行任何有效的数组方法时,它不起作用。例如:

pages.map(&:id)
NoMethodError: undefined method `domain_id' for #<Page::ActiveRecord_Associations_CollectionProxy:0x007f4723af2208>

irb(main):090:0> pages.pluck("id")
NoMethodError: undefined method `pluck' for #<Array:0x007f4725681640>

我只想从 pages 数组中获取 "id",但据我所知,没有任何方法可以解决这个问题。

谢谢 迈克

如果您仔细阅读错误,我想您会发现问题所在。您当前的查询产生以下类型的结果:

[ACollectionOfPages, ACollectionOfPages, ...]

所以您的 map 代码试图在 ActiveRecord 集合上调用 #id,因为这就是数组的每个元素。

如果你真的想使用你当前的代码,我会 运行:

pages.map { |collection| collection.map(&:id) } # possibly with .flatten

你最好创建一个这样的协会:

class Item < ActiveRecord::Base
  has_many :item_steps
  has_many :pages, through: :item_steps
end

然后,Item.pages 将 return 一个 ActiveRecord 集合,因此您可以 运行 Item.pages.pluck(:id).