我们需要验证下载链接是否有效。由于文件非常大,我们需要验证我们的下载目录中没有过时的无用文件。因此,我们有一个下载管理页面,用于验证每个数据库file_name在下载目录中是否具有相同的文件。然后该页面验证我们目录中的每个文件在我们的数据库中都有一个file_name。
在控制器中:
@documents = Document.find(:all, :order => "section asc, sub_section asc, position asc, name asc")
@files = Dir.glob("public/downloads/*").sort
第一次验证:在我看来,验证数据库中的每个文档记录都有一个文件:
<% @documents.each do |d| -%>
<% if @files.include?("public/downloads/" + d.file_name)
clr = "Green"
else
clr = "Red"
end %>
... color coded print routine ...
<% end %>
第二次验证:在我看来验证每个文件在日期库中都有文档记录:
<% @files.each do |f| -%>
<% str = f.gsub(/^.*\//, '')
if @documents.include?(str)
clr = "Green"
else
clr = "Red"
end %>
... color coded print routine ...
<% end %>
使用我的小测试文档列表,打印的数据库file_names与从我们的下载目录打印的文件名完全匹配。但是,第二次验证的包含测试不起作用。我无法弄清楚原因。
谢谢!
答案 0 :(得分:2)
此代码:
if @documents.include?(str)
应如下所示:
if @documents.detect{|doc| doc.file_name == str}
答案 1 :(得分:0)
而不是@documents.include?(str)
使用@documents.any? { |d| d.file_name == str}
答案 2 :(得分:0)
问题是@documents不是file_names的集合,它是Document实例的集合。你应该尝试这样的事情:
@documents.map(&:file_name).include?(str)
这将收集所有file_names,然后检查str是否匹配其中任何一个。