在我的控制器中,我有以下内容:
@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?
由于
答案 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 -%>