ruby - 循环遍历 ActiveRecord::Associations::CollectionProxy 每个

标签 ruby activerecord

我使用事件记录 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

有人有什么想法吗?

干杯

最佳答案

您可能想改用 map:

page.content.map do |item|
  item.content_id
end

map(又名 collect)将遍历数组并在数组成员上逐个运行您要求的任何代码。它将返回一个新数组,其中包含这些方法调用的返回值。

关于ruby - 循环遍历 ActiveRecord::Associations::CollectionProxy 每个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18116091/

相关文章:

ruby-on-rails - 如何插入可预测的 ID 以使用 ActiveRecord 进行测试

ruby-on-rails - Ruby on Rails : why ActiveRecord uses "datetime" type instead of "timestamp" for timestamp fields?

ruby-on-rails - 将 Accepts_nested_attributes_for 与单表继承一起使用时验证失败

ruby-on-rails - 从 sqlite3 切换到 Postgres 后的关系问题

ruby - 如何分析数组中顺序数字的最大百分比增益(突发)?

ruby-on-rails - 按 Rails 中的嵌套关​​联进行分组和计数

mysql - 有趣的 Rails 协会挑战赛

ruby - 为什么模块的单例方法在混合的下游特征类中不可见?

ruby - 如何让 Ruby 找到原生库?

ruby-on-rails - 使用 globalize3 获取数据时 ActiveRecord StatementInvalid