如何在控制器中创建实例变量并在视图中使用实例变量?

时间:2013-08-18 17:55:27

标签: ruby-on-rails ruby arrays ruby-on-rails-3.2

我需要知道某个目录是否为空,以便它们不会显示。

尝试存储:如果目录有文件;然后我会在视图中调用它。

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的目录。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

这遍历每个目录,如果它不为空,则将basename推送到我的数组。