трудности с "включить?"заявление - PullRequest
0 голосов
/ 27 января 2011

Нам нужно убедиться, что ссылки для скачивания работают. И поскольку файлы довольно большие, нам нужно убедиться, что у нас нет устаревших, бесполезных файлов, которые находятся в нашем каталоге загрузок. Итак, у нас есть страница управления загрузками, которая проверяет, что в каждой базе данных 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 %>

с моим небольшим списком тестовых документов, имена напечатанных файлов базы данных точно совпадают с именами файлов, напечатанными из нашего каталога загрузки. однако включающий тест для второй проверки не работает. я не смог понять почему.

спасибо!

Ответы [ 3 ]

2 голосов
/ 27 января 2011

Этот код:

if @documents.include?(str)

должен выглядеть следующим образом:

if @documents.detect{|doc| doc.file_name == str}
0 голосов
/ 27 января 2011

Проблема в том, что @documents - это не коллекция имен файлов, а коллекция экземпляров Document.Вместо этого вы должны попробовать что-то вроде этого:

@documents.map(&:file_name).include?(str)

Это соберет все имена файлов и затем проверит, соответствует ли str любому из них.

0 голосов
/ 27 января 2011

Вместо @documents.include?(str) используйте @documents.any? { |d| d.file_name == str}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...