2012-12-28 24 views
1

我正在關注本教程http://net.tutsplus.com/tutorials/create-a-simple-music-streaming-app-with-ruby-on-rails/,但使用aws_sdk而不是aws_s3。我基本上看到他們做同樣的事情。在下載部分,我將下載功能放入模型中,它確實顯示了要下載的URL,但是從那裏我不知道如何觸發下載,因此我將該功能移到幫助程序並直接從視圖中調用它。從那裏軌道不斷抱怨未定義的方法`MODEL_NAME」的URI :: HTTPS:類在幫助程序中定義方法時未定義的AWS :: S3

這是下載方法

def download song_key 
    bucket = AWS::S3.new.buckets['mybucket'] # error from this line because undefined AWS::S3 
    song = bucket.objects[song_key] 
    song.url_for(:read, expires: 10*60) 
end 

這是意見

<% @songs.each do |song| %> 
    <%= link_to "download", download(song.key) %> 
<% end %> 

任何想法如何要解決這個問題 ?謝謝

回答

3

你正在閱讀堆棧跟蹤略有不對 - 它不是你的幫助方法引發異常,但link_to內的東西。

url_for方法正在返回一個URI::HTTPS實例。當link_to的第二個參數不是字符串時,它假定它是一個activemodel類,並嘗試從中找到適當的路由。例如,如果你這樣做

link_to 'Show', person 

和人是人的一個實例,會的link_to最終從person_path(person)生成的URL。

URI不是活動的模型,所以這個找到合適的路由的過程失敗了。所有你需要做的就是打開URI成字符串,例如

def download_url song_key 
    bucket = AWS::S3.new.buckets['mybucket'] # error from this line because undefined AWS::S3 
    song = bucket.objects[song_key] 
    song.url_for(:read, expires: 10*60).to_s 
end 

顯然,在aws_s3返回一個字符串,而不是URI的對象是QHY你是以下不這樣做教程的等效方法。

相關問題