9

次のモデルをアクティブ レコード 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

誰かアイデアはありますか?

乾杯

4

1 に答える 1

14

mapおそらく代わりに使用したいでしょう:

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

map(aka collect) は配列を反復処理し、配列のメンバーに対して要求したコードを 1 つずつ実行します。これらのメソッド呼び出しの戻り値を含む新しい配列を返します。

于 2013-08-08T00:38:34.123 に答える