我怎么看@files中是否包含“file_name”?

时间:2011-01-27 09:32:53

标签: ruby-on-rails ruby

在我的控制器中,我有以下内容:

@documents = Document.find(:all, :order => "section asc, sub_section asc, position asc, name asc")
@files = Dir.glob("public/downloads/*").sort

在我看来,我有以下内容:

<% @documents.each do |d| -%>
    <tr class="<%= cycle("","alt") %>">
        <td><%= d.name %></td>
        <td><%= d.file_name %></td>
        <td><%= d.description %></td>
        <td>
            <%= link_to "Edit", edit_document_path(d) %><br>
            <%= link_to "Del", document_path(d), :confirm => "Are you sure boogerhead?", :class => "destroy", :method => :delete %>
        </td>
    </tr>
<% end -%>

如果@files中不包含file_name,那么依赖于该名称(file_name)的另一个页面上的链接将不起作用。如果没有匹配,我将颜色代码file_name表示存在问题。我如何检查@files中是否包含file_name?

由于

2 个答案:

答案 0 :(得分:2)

Array#include?方法检查给定项是否包含在数组中,因此您可以这样做:

if @files.include?(d.file_name)
  # It is included
else
  # It isn't
end

答案 1 :(得分:0)

您还可以检查@directory循环中某个文件是否存在:

File.exist?(file_path)

或者如果我正确地阅读您的代码,您正在检查文档是否包含某个文件,对吧?如果是这样,为什么不使用paperclip gem,以便添加文档应该有文件的关联。

或者,如果不可能,您仍然可以将该逻辑转移到您的文档模型中,如下所示:

 def has_file
   File.exist?("public/downloads/#{file_name}")
 end 

然后在你的循环中,

<% @documents.each do |d| -%>
  <% if d.has_file %>
    <tr class="<%= cycle("","alt") %>">
      <td><%= d.name %></td>
      <td><%= d.file_name %></td>
      <td><%= d.description %></td>
      <td>
        <%= link_to "Edit", edit_document_path(d) %><br>
        <%= link_to "Del", document_path(d), :confirm => "Are you sure boogerhead?", :class => "destroy", :method => :delete %>
      </td>
    </tr>
  <% end %>
<% end -%>