2011-09-08 30 views
0

我的Facebook喜欢保存在一个表(他们在一个字符串是)做在控制台下返回使用类似方法为用户模型喜欢:如何将它变成,然后从这个数组中提取特定的东西?

User.first。喜欢

=> "--- !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:

Ÿ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"] 

回答

2

分割字符串分成几行,由\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_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"] 
+0

谢谢。完全按照我需要的方式工作,并感谢将其分成几个步骤以便清晰,即添加到数组,过滤和剥离。 – Simpleton

相关问题