我设置了以下模型,其中包含活动记录4(映射旧数据库)
class Page < ActiveRecord::Base
self.table_name = "page"
self.primary_key = "page_id"
has_many :content, foreign_key: 'content_page_id', class_name: 'PageContent'
end
class PageContent < ActiveRecord::Base
self.table_name = "page_content"
self.primary_key = "content_id"
belongs_to :pages, foreign_key: 'page_id', class_name: 'Page'
end
以下工作正常......
page = Page.first
page.content.first.content_id
=> 17
page.content.second.content_id
=> 18
然而我希望能够循环所有项目,如此
page.content.each do |item|
item.content_id
end
但它只返回整个集合而不是单个字段
=> [#<PageContent content_id: 17, content_text: 'hello', content_order: 1>, #<PageContent content_id: 18, content_text: 'world', content_order: 2>]
看起来它是一个ActiveRecord :: Associations :: CollectionProxy
page.content.class
=> ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_PageContent
谁有任何想法?
欢呼声
答案 0 :(得分:14)
您可能希望改为使用map
:
page.content.map do |item|
item.content_id
end
map
(又名collect
)将遍历一个数组,并逐个运行你要求它在数组成员上的任何代码。它将返回一个包含这些方法调用的返回值的新数组。