#<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)
.
我不知道我在 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)
.