我目前正在循环浏览目录中的文件,以查看特定目录中的任何文件名是否与数据库中列出的文件名匹配。我这样做如下:
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
会有什么特别之处吗?非常感谢提前。
答案 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)