未定义的方法&#39; id&#39; for#<page :: activerecord_associations_collectionproxy:0x007f4723af2208> </page :: activerecord_associations_collectionproxy:0x007f4723af2208>

时间:2015-01-12 19:34:56

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

我不知道我在Rails控制台中执行的查询是怎么回事。我正在运行Rails 4.1.5。首先,我得到一组项目:

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

有了这些页面后,我就找到了这个课程:

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>

我只想得到&#34; id&#34;来自pages数组,但我所知道的并不适用于此。

感谢 迈克

1 个答案:

答案 0 :(得分:1)

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

[ACollectionOfPages, ACollectionOfPages, ...]

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

如果您真的想使用当前的代码,我可以运行:

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将返回ActiveRecord个集合,因此您可以运行Item.pages.pluck(:id)