2013-08-08 8 views
5

Ich habe die folgenden Modelle mit aktiver Datensatz 4 (Abbildung eine alte Datenbank)Schleife durch Active :: Verbände :: CollectionProxy mit jedem

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 

Die folgende funktioniert gut eingerichtet ....

page = Page.first 
page.content.first.content_id 
=> 17 
page.content.second.content_id 
=> 18 

jedoch möchte ich Schleife in der Lage sein, obwohl alle Elemente wie so

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

aber es einfach die whol zurück e Sammlung nicht die einzelnen Feld

=> [#<PageContent content_id: 17, content_text: 'hello', content_order: 1>, #<PageContent content_id: 18, content_text: 'world', content_order: 2>] 

scheint es, ist ein Activerecord :: Verbände :: CollectionProxy

page.content.class 
=> ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_PageContent 

jemand irgendwelche Ideen hat?

prost

Antwort

14

Sie wahrscheinlich map verwenden, anstatt wollen:

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

map (aka collect) wird ein Array und laufen, was Code, den Sie es durchlaufen zu, auf die Mitglieder des Arrays stellen ein einzeln. Es wird ein neues Array mit den Rückgabewerten für diese Methodenaufrufe zurückgegeben.

+1

Warum funktioniert page.content.each dann nicht? – MSC

+1

@MSC In diesem Fall wird es nicht funktionieren, da OP die Ergebnisse des Aufrufs innerhalb des Blocks zurückgeben möchte. 'Jeder' würde das nicht tun. –