2016-06-28 124 views
0

我有一個類似於這樣一個塊:方法添加到迭代對象

<% @github_tmp_files.files.each do |file| %> 
     <li><%= link_to @github_tmp_files.filename(file.key), @github_tmp_files.download_url(file.key) %></li> 
    <% end %> 

正如你可以在迴路中看到我所說的兩個方法與file作爲參數:

@github_tmp_files.filename(file.key) 
@github_tmp_files.download_url(file.key) 

我寧願這樣稱呼這兩種方法:

file.filename (should return) @github_tmp_files.filename(file.key) 
file.download_url (should return) @github_tmp_files.download_url(file.key) 

因此,最後我可以寫這樣的循環:

 <% @github_tmp_files.files.each do |file| %> 
     <li><%= link_to file.filename, file.download_url %></li> 
    <% end %> 

如何做我必須改變files方法@github_tmp_files,以便它允許這種行爲?由於

#in @github_tmp_files -> Class 

def files 
    github_bucket.objects(prefix: @folder) 
end 
+1

這些是你的類或者是他們從一些寶石來了嗎? –

+0

@MladenJablanović'@github_tmp_files - > Class'是我的課程。什麼'def files'返回的塊是AWS :: S3 :: Object :: Summaries:http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/ObjectSummary.html –

+0

@MladenJablanović這就是爲什麼我可以調用他們的'鑰匙'。我應該向S3對象摘要添加方法嗎?我會怎麼做?謝謝 –

回答

0

只是出於好奇:

<% @github_tmp_files.files.map(&:key).each do |file| %> 
    <li> 
    <%= link_to *[:filename, :download_url].each do |m| 
        @github_tmp_files.public_send(m, file) 
       end %> 
    </li> 
<% end %>