`File.exist?`将找不到存在的文件

时间:2015-10-15 19:06:06

标签: ruby

我正在尝试使用File.exist?来拥有动态背景。当我试图指向File.exist?它似乎找不到特定的文件。

image_path = "../assets/" + city_code + ".jpg"
if 
  File.exist?('#{image_path}')
  @image = image_path
else
  @image = "../assets/coastbanner.jpg"
end

如果我使用我知道的路径删除替换city_code,它仍然无法找到它。我必须遗漏一些小事。

我想要更清楚一点:如果我删除插值/变量并将其替换为我知道可行的路径,例如'../assets/coastbanner.jpg',它仍然无效。事实上,似乎没有有效的路径可以让它产生真正的反应。

5 个答案:

答案 0 :(得分:1)

您需要使用双引号进行字符串插值。

File.exist?("#{image_path}")

在这种情况下,您实际上可以只使用该变量,因为它已经是您想要的字符串。

File.exist?(image_path)

如果您想使用#{}功能,则可以在创建image_path时使用它。

image_path = "../assets/#{city_code}.jpg"

答案 1 :(得分:1)

if 
  File.exist?( image_path )

答案 2 :(得分:1)

您的代码存在一些问题:

  • 字符串插值仅适用于双引号
  • 当变量是已经
  • 的字符串时,不需要字符串插值
  • 条件属于与if
  • 相同的行

此外,运行服务器的文件夹可能与提供当前网页的文件夹不同。也就是说,对Rails.root测试使用File.exist?的图像链接和路径使用绝对路径可能是有意义的。

我不确定您的应用程序的文件夹结构,但以下内容应该有效:

image_path = "/assets/#{city_code}.jpg"

if File.exist?(Rails.root.join('app', image_path))
  @image = image_path
else
  @image = '/assets/coastbanner.jpg'
end

提示:使用coastbanner.jpg进行测试以使图像apth正确,然后使用File.exist?进行测试以获取应用中的路径。

答案 3 :(得分:0)

不要认为你可以在带有单引号的字符串中使用#{}。尝试重复引用它。

答案 4 :(得分:0)

我假设你在Rails应用程序中使用,如果是这样,最可能的原因是:

当Rails创建assets时,它会创建一个摘要。因此,您的图像名称可能在名称中包含摘要字符串。所以我建议使用image_pathasset_path

例如:File.exist?(image_path("#{city_code}.jpg"))

但是话说回来,如果你想设置自定义图像,那么处理这类案例就是在数据库中有一个标志。因为它比访问文件系统快得多。