2012-07-15 46 views
1

我一直在努力使用youpy的「lastfm」gem從last.fm中提取動態數據。獲取數據的效果很好;然而,軌道似乎不喜歡動態部分。現在,我已經添加的輔助文件夾中找到的代碼名爲「HomeHelper」(創建Rails應用程序的過程中產生的)一個輔助模塊:Rails3助手和動態內容

module HomeHelper 

@@lastfm = Lastfm.new(key, secret) 
@@wesRecent = @@lastfm.user.get_recent_tracks(:user => 'weskey5644')  

def _album_art_helper 

    trackHash = @@wesRecent[0] 
    medAlbumArt = trackHash["image"][3] 

    if medAlbumArt["content"] == nil 
     html = "<img src=\"/images/noArt.png\" height=\"auto\" width=\"150\" />" 
    else 
     html = "<img src=#{medAlbumArt["content"]} height=\"auto\" width=\"150\" />" 
    end 

    html.html_safe 

end 

def _recent_tracks_helper 

    lfartist1 = @@wesRecent[0]["artist"]["content"] 
    lftrack1 = @@wesRecent[0]["name"] 
    lfartist1 = @@wesRecent[1]["artist"]["content"] 
    lftrack1 = @@wesRecent[1]["name"] 

    htmltrack = "<div class=\"lastfm_recent_tracks\"> 
       <div class=\"lastfm_artist\"><p>#{lfartist1 = @@wesRecent[0]["artist"]["content"]}</p></div> 
       <div class=\"lastfm_trackname\"><p>#{lftrack1 = @@wesRecent[0]["name"]}</p></div> 
       <div class=\"lastfm_artist\"><p>#{lfartist2 = @@wesRecent[1]["artist"]["content"]}</p></div> 
       <div class=\"lastfm_trackname\"><p>#{lftrack2 = @@wesRecent[1]["name"]}</p></div> 
      </div> 
    "  

    htmltrack.html_safe 
end 
end 

我創建了一個局部的每一個,並將其添加到我的索引頁:

<div class="album_art"><%= render "album_art" %></div> 
<div id="nowplayingcontain"><%= render "recent_tracks" %></div> 

大,這得到像我想要在頁面上我所需要的數據並顯示;不過,根據last.fm,當歌曲改變時,它似乎不會在我的網站上,除非我重新啓動服務器。

我已經測試過使用Phusion Gassenger和WEBrick,它似乎在兩者上都這樣做。我曾認爲這可能是一個緩存這個特定頁面的問題,所以我嘗試了一些緩存黑客來使頁面重新加載。這沒有幫助。

然後我得出結論,將這些代碼粘貼到幫助文件中可能不是最好的解決方案。我不知道助手處理動態內容的能力如何;如此。如果有人對此有任何洞見,真棒!感謝大家!

+0

爲什麼你用'@@'代替所有這些? – 2012-07-15 03:35:43

回答

1

你的問題不在於你使用一個幫手,問題是,你使用類變量:

module HomeHelper 
    @@lastfm = Lastfm.new(key, secret) 
    @@wesRecent = @@lastfm.user.get_recent_tracks(:user => 'weskey5644') 

時,先讀取模塊進行初始化。特別是,@@wesRecent將被初始化一次,然後它將保持不變,直到您重新啓動服務器或碰巧獲得新的服務器進程。你應該能夠調用get_recent_tracks當你需要它:

def _album_art_helper 
    trackHash = @@lastfm.user.get_recent_tracks(:user => 'weskey5644').first 
    #... 

注意,這意味着你的兩個幫手不一定會使用相同的曲目列表。

您可能需要添加一些「最多隻刷新一次音軌」一次的邏輯。

+0

太棒了!非常感謝您的幫助!! – playthisocarina 2012-07-15 03:58:53