将driectory中的文件名与数据库

时间:2015-11-17 12:30:13

标签: ruby-on-rails ruby ruby-on-rails-4

我目前正在循环浏览目录中的文件,以查看特定目录中的任何文件名是否与数据库中列出的文件名匹配。我这样做如下:

Dir.foreach("#{path}/#{directory}") do |file|
            puts "File name is #{file}"
            puts "true if in database: #{@company.assets.where(uploaded_file_file_name: file).exists?}"
end

问题在于,当我将所有文件名添加到数据库进行健全性检查时,exists?一直出现错误。

但是,如果我将任何名称存储为变量并检查exists?,则会出现这种情况。我只是无法在上面的循环中使用|file|。我应该注意puts #{file}只显示文件名,让我相信file只是一个简单的字符串。 Dir会有什么特别之处吗?非常感谢提前。

2 个答案:

答案 0 :(得分:1)

Dir.foreach遍历文件名,包括路径。我想你只是将文件名(没有路径)存储到数据库中。

请尝试:

@company.assets.exists?(
  uploaded_file_file_name: File.basename(file)
)

答案 1 :(得分:0)

找出问题所在。 Paperclip正在用下划线替换任何空格,因此大多数条目都有一个或两个我忽略的下划线。我只需要在循环中对file做同样的事情:

filesnake=file.tr(" ", "_").tr(",", "_")

然后比较filesnake而不是file

@company.assets.exists?(uploaded_file_file_name: filesnake)