#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 минут, чтобы принять этот ответ.