Как мне превратить это в, а затем извлечь конкретные вещи из этого массива? - PullRequest
0 голосов
/ 08 сентября 2011

У меня есть лайки Facebook, сохраненные в таблице (они в строке), и в консоли выполняю следующие действия, чтобы вернуть лайки, используя метод like для модели пользователя:

User.first.likes

=> "--- !seq:Koala::Facebook::GraphCollection \n- name: Rome Sweet Rome\n  category:
   Book\n  id: \"136333439795671\"\n  created_time: 2011-09-05T12:03:09+0000\n- name:
   Drawn Together\n category: Tv show\n  id: \"8694990902\"\n  created_time:
   2008-10-03T10:39:46+0000\n"

Ниже это в YAML:

y User.first.likes

--- |
 --- !seq:Koala::Facebook::GraphCollection 
 - name: Rome Sweet Rome
 category: Book
 id: "136333439795671"
 created_time: 2011-09-05T12:03:09+0000
 - name: Drawn Together
 category: Tv show
 id: "8694990902"
 created_time: 2008-10-03T10:39:46+0000

 => nil

Я хочу, чтобы конечный результат дал мне что-то вроде:

>> ["Rome sweet Rome", "Drawn Together"]

1 Ответ

2 голосов
/ 08 сентября 2011

Разделить строку на отдельные строки, разделенные символом \n (или, если встречается строка "\ n", используйте двойные кавычки для разделения этой строки)

like_elements = User.first.likes.split("\n") # <- String, not character, delimited version
=> ['id: "136333439795671"', 'created_time: 2011-09-05T12:03:09+0000", "- name: Drawn Together" ... etc.]

Затем соберите все элементы, которые начинаются с "- name:", в их собственный массив:

name_elements = like_elements.select{|s| s.start_with?("- name: ")}
=> ["- name: Drawn Together", "- name: Rome sweet Rome"]

Затем возьмите каждый из элементов в name_elements, удалите начальный текст "- name: " и удалите ведущийконечный пробел

names_of_likes_only = name_elements.collect{|n| n.gsub("- name: ", "").strip}
=> ["Drawn Together", "Rome sweet Rome"]
...