2010-01-04 7 views
0

Bonjour J'ai créé une association un-à-plusieurs entre «commandes» et «utilisateurs». Je me demande comment avoir console il suffit de retourner un tableau contenant plutôt que d'une gamme complète de données ID:Ruby Console Aide avec une association un-à-plusieurs

user = User.find_by_login ("Lesa")

user.orders => [#, #]

user.orders.id

NoMethodError: undefined method `order' for #<User:0x10351f320> 
    from /Users/justinz/.gem/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/attribute_methods.rb:260:in `method_missing' 
    from (irb):10 

J'ai également essayé user.order.id, et j'ai reçu le même message. Qu'est-ce que je fais mal?

Répondre

2

Extrait l'ID de chaque élément en utilisant la carte:

user.orders.map(&:id) 
+0

I Whish Ruby 2.0 serait désapprouver soit la carte ou la collecte ... Que diriez-vous de recueillir juste parce qu'il a plus de caractères? –

+0

@jonas, aucun nom n'est vraiment génial, mais au moins "map" est familier avec d'autres langages comme Haskell et PHP. Je ne suis pas au courant de "collecter" étant utilisé ailleurs. –

0

Vous pouvez utiliser Symbole to_proc raccourci fourni par Rails

user.orders.collect(&:id) 

Ceci est un raccourci pour

user.orders.collect { |o| o.id } 
+0

Je voudrais que Ruby 1.9 désapprouve la carte ou la collecte ... Que diriez-vous de collecter juste parce qu'il a plus de caractères? –

2

Pourquoi ne pas simplement utilisez ActiveRecord :: Associations :: ClassMethod « singular_collection_ids »

user.order_ids