2013-08-18 3 views
0

Мне нужно знать, пуст ли каталог, так как они не будут отображаться.Как создать переменную экземпляра в контроллере и использовать переменную экземпляра в представлении?

Пытается хранить: Если в каталоге есть файлы; Тогда я буду называть это в представлении.

def index 
    @filter = params[:filter] 
    @type = params[:type] 
    @content = [] 

if @filter 
directory_path = "public/files/marketing/voip" 
directory = Dir.glob("#{directory_path}/#{@filter}/#{@type}") 
directory.each do |data| 
if File.exists?(data) && !File.directory?(data) 

    @content = Array.new("#{@type}") 

end 
@view = 'types' 
end 
end 

Я не уверен, как хранить информацию, здесь я хочу сохранить @type только пустые каталоги.

Затем вызовите @content в представлении, чтобы отобразить каталоги, в которых я сохранил @type.

+0

Можете ли вы предоставить больше контекста и, возможно, конкретный вопрос? Любая переменная экземпляра, созданная в контроллере, доступна в соответствующем представлении. –

+0

Я хочу отображать каталоги в веб-браузере, который не пуст. Отобразятся каталоги, в которых есть файлы. Здесь я пытаюсь сохранить 'at'type каталога для каждого каталога, который не пуст. Так сказать, у меня было 2 папки, a = empty; b = full. Я сканирую оба. Я сохраняю значение «b». «b» будет «at'type». Тогда, на мой взгляд, я могу использовать сохраненные значения, чтобы отображать только те @type каталогов, которые заполнены. – DDDD

ответ

0

Это то, что работает:

@view = 'types' 

      #Loop through directories to see if files exist 
     #If files exist add directory name to @array 
     @directories = Array.new 
     @all_directories = Dir.glob("public/files/marketing/voip/#{@filter}/*") 
     @all_directories.each do |directory| 
      base_directory = Dir.glob("#{directory}/*") 

      unless base_directory.empty? 
       @directories.push(File.basename(directory)) 
      end 

Это проходит через каждый каталог и если его не им, pty нажимает basename на мой массив.

1

1) Почему вы проверяете, есть ли File.exists? Вы просто заглянули в каталог, поэтому каждый элемент в результатах действительно существует.

2)

Я хочу, чтобы сохранить @type только пустые каталоги.

@empty_dir_types = [] 

... 


    fname = "...." 

    if Dir.entries(fname).empty? 
    @empty_dir_types << File.basename fname 
    end 

Или

@type = params[:type] 
@empty_dir_types = [] 

... 

    fname = "...." 

    if Dir.entries(fname).empty? 
    @empty_dir_types << @type 
    end 

Или

@type = params[:type] 
@empty_dir_type = nil 

fname = "...." 

if Dir.entries(fname).empty? 
    @empty_dir_type = @type 
end 
+0

Является ли fname моей директорией? Мне не нужен каталог = Dir.glob (...? Или .each do | data |? – DDDD

+0

@DDDD: Да, fname является коротким для имени файла, а в файле unix world filename означает либо имя каталога, либо имя файла Назначьте любой каталог, который вы хотите найти в fname. Или используйте свое собственное имя переменной: 'directory =" # {directory_path}/# {@ filter}/# {@ type} "' Dir.entries похож на Dir.glob , но Dir.entries также возвращает скрытые файлы, то есть имена файлов, начинающиеся с точки, например '.bash_profile'. Вам не нужно вызывать each(), вы можете просто написать' if Dir.glob (directory) .empty? 'Dir .glob возвращает массив - если он пуст, каталог пуст (accept для скрытых файлов). – 7stud

+0

Проводит ли этот поиск по всем каталогам в основном «каталоге_папка»? – DDDD