我正在尝试使用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',它仍然无效。事实上,似乎没有有效的路径可以让它产生真正的反应。
答案 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_path
或asset_path
例如:File.exist?(image_path("#{city_code}.jpg"))
但是话说回来,如果你想设置自定义图像,那么处理这类案例就是在数据库中有一个标志。因为它比访问文件系统快得多。