Как мне узнать, содержится ли "имя_файла" в @files? - PullRequest
0 голосов
/ 27 января 2011

В моем контроллере у меня есть следующее:

@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, чтобы указать, что есть проблема. Как проверить, содержится ли имя_файла в @files?

Спасибо

Ответы [ 2 ]

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

Метод Array#include? проверяет, содержится ли данный элемент в массиве, поэтому вы можете сделать:

if @files.include?(d.file_name)
  # It is included
else
  # It isn't
end
0 голосов
/ 27 января 2011

Вы также можете проверить, существует ли файл где-нибудь в вашем цикле @directory:

File.exist?(file_path)

или если я правильно читаю ваш код, вы проверяете, есть ли в документе определенный файл, верно? Если это так, то почему бы не использовать gem paperclip, чтобы вы могли добавить ассоциацию, в которой у вашего документа должен быть файл.

Или, если это невозможно, вы можете перенести эту логику в модель документа следующим образом:

 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 -%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...