我不知道我在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数组,但我所知道的并不适用于此。
感谢 迈克
答案 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)
。