2013-01-06 59 views
0

我試圖去掌握使用Ruby on Rails和Facebook。我是Rails的新手,我很難理解StackOverflow中已有的其他答案。這裏http://pastebin.com/nckSsKWM和我的觀點index.html.erb:Facebook使用考拉

你可以在這裏查看我的模型user.rb http://pastebin.com/8UXGN8Ri

我已經成功至今是打印亂碼,從Facebook到返回我的觀點。我可以把它打印出所有數據爲我所有的用戶的「朋友」 - 但它打印這個在哈希:

Number of friends: 2 

App Friends: 

[ 
    { 
     "uid"=>100004995550096, 
     "username"=>"", 
     "is_app_user"=>true 
    }, 
    { 
     "uid"=>100005005780053, 
     "username"=>"", 
     "is_app_user"=>true 
    } 
] 

兩個問題:

  1. 它打印數據這兩個「測試賬戶」的Facebook好友。我一直試圖讓它打印只有同時使用應用程序的朋友的數據 - 在這種情況下,它只是兩個朋友中的一個。
  2. 其次,它返回整個數據散列。如果我只想打印出用戶名,用戶名或個人資料圖片,我該如何去做這件事?

從我的經驗,到目前爲止,我想通過哈希迭代,使用each塊,糾正我,如果我錯了,然後我希望它打印出所有的UID「值」例如,他們已經連接到我的應用程序的uids。我試圖寫我自己的塊,需要不同的密鑰,我卡住了。沒有什麼似乎符合我的期望。

我該如何迭代散列,並獲得返回值爲某些值,甚至可能使用條件?

回答

1

我相信你的原始散列有點不正確,因爲這兩個朋友都是應用程序用戶。 我假設你原來的哈希

friends = [ 
    { 
     "uid"=>100004995550096, 
     "username"=>"", 
     "is_app_user"=>true 
    }, 
    { 
     "uid"=>100005005780053, 
     "username"=>"", 
     "is_app_user"=>false 
    } 
] 

你可以採取兩種不同的方法。

  1. 更容易閱讀,但稍慢(需要兩次迭代)。

friends.select {| f | f [「is_app_user」]} .map {| f | F [ 「UID」]}

說明:

選擇方法的過濾器陣列,以僅朋友哪個匹配謂詞(條件)。 完整的謂詞是f [「is_app_user」] == true,但我在這裏使用了快捷方式。最後,它返回與謂詞相匹配的新項目數組。 Map方法執行投影以僅過濾我們感興趣的已經過濾的朋友陣列的字段。

  1. 更快的閱讀,但可能有點難以理解,特別是如果你是Ruby的新手。
friends.inject([]) do |app_friends,friend| 
    app_friends << friend["uid"] if friend["is_app_user"] 
    app_friends 
end 

說明:

進樣是一個非常有效的方法,但有時可以混淆理解。 空數組是app_friends變量的初始值。注入工作的方式是傳遞給你初始值(在我們的例子中是app_friends),並期望你對它執行操作並從塊中返回新的值用於下一次迭代。如果我們沒有執行任何操作,我們仍然需要返回值,這就是爲什麼我們在最後有app_friends的原因。

這兩種方法都只會過濾應用程序用戶並輸出這些用戶的uid。隨着我的假設輸出將是

=> [100004995550096]

+0

你說得對哈希,原來我有在數據庫中的其他「朋友」,這樣就使得更多現在感覺! – Samwise

+0

所以,第一個選項。我們在朋友上調用select方法(從fb圖中抽取?) - 然後傳遞給它一個塊,它爲每個朋友設置一個實例變量(f) - 併爲每個f選擇is_app_user鍵值) - 然後我們做map方法(在這種情況下究竟做了什麼?改變格式?) - 爲每個「selected」f?映射出uid。 – Samwise

+0

第二個選項,我們正在對朋友進行注入 - 進入一個空數組?然後,如果朋友「is_app_user」(true) - >然後返回app_friends,我們將朋友(uid)附加到所述朋友。我不太確定我是否正確地遵守這一條。我會在早上嘗試這兩種選擇,並讓你知道我是怎麼開始的 - 這有點晚了 - 只是想嘗試和理解第一:)。真的很感謝你的時間。 – Samwise

相關問題