MongoId rails3, получить элементы внутреннего массива

#ruby-on-rails #ruby #mongodb #mongoid

#ruby-on-rails #ruby #mongodb #mongoid

Вопрос:

У меня есть 2 модели, Kid и friend_list. Для ребенка, которого я использую:

 k = Kid.where(email: "adfadf@adfadsfa.com").first
  

Затем, чтобы получить список друзей, я набираю:

 k.friend_list
  

и я получаю:

 [#<FriendList _id: 5305cb6485216d2689004785, _type: nil, name: "Friends", members: ["5374a1f320db90054c0000ea", "537c63ea20db9040d2000332"], kid_id: BSON::ObjectId('5305cb6285216d2689004742'), teacher_id: nil>]
  

Но мне нужны только «члены».

Я пытался

k.friend_list.members, но я получаю

 NoMethodError: undefined method `members' for
#<Array:0x007fcf4b013138> from /Users/jeanosorio/.rvm/gems/ruby-1.9.3-p484@blabloo/gems/mongoid-2.8.1/lib/mongoid/criteria.rb:387:in
`method_missing'
  

Как я могу получить только массив элементов??

Заранее спасибо.

Комментарии:

1. Friend_list возвращает список объектов, вам нужны члены каждого элемента в коллекции или только члены первого элемента?

2. Почему вы получаете массив в качестве результата? Kid имеет ли belongs_to: friend_list ?

Ответ №1:

Кажется, что friend_list возвращает Array значение FriendList .

Вы можете создать новый список, состоящий из значений средства members получения, используя map :

 k.friend_list.map(amp;:members)
# => [["5374a1f320db90054c0000ea", "537c63ea20db9040d2000332"]]
  

Или, в качестве альтернативы, если вы хотели иметь только один FriendList per Kid , вам следует изменить свою модель на один FriendList объект.

Для текущей модели вы также можете сделать:

 k.friend_list.first.members
# => ["5374a1f320db90054c0000ea", "537c63ea20db9040d2000332"]
  

Комментарии:

1. Спасибо Uri, это решает мою проблему, Stackoverflow говорит, что мне нужно подождать 12 минут, чтобы принять этот ответ.