向迭代对象添加方法

时间:2016-06-28 11:22:42

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

我有一个类似于这个的块:

    <% @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 :(得分: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 %>