11

我在这里找到了一些关于 File.exists 的帖子?在 Rails 应用程序中,但尝试解决方案没有帮助,我相当新,所以我必须做一些愚蠢的事情。

我正在使用:

  • 导轨 3.2.11
  • 红宝石 1.9.3
  • 下面提到的文件的回形针
  • ActiveAdmin 上传下面提到的文件
  • 在开发环境中工作
  • 未预编译的资产

我有一个模型“样式”,它有一个图像附件,我可以用

<%= image_tag(@style.style_image) %>

它工作得很好。

简而言之,我想检查文件图像是否真的存在于它应该在的文件夹中 - 我不想使用@style.style_image.present?用于检查图像,因为那只是检查数据库记录。我想使用File.exist?看看是否真的有@style.style_image的文件。

所以在我的视图文件中,我有代码

<% if File.exist?(@style.style_image.url) %>
The image exists.
<% else %>
The image is not here.
<% end %>

当我加载页面时,它总是打印“图像不在这里”。在正下方,我正在使用 image_tag 显示我的图像,所以我知道图像就在那里。

我也试过

<% if File.exist?(Rails.root + @style.style_image.url) %>

没有运气。我还尝试使用 FileTest.exist?、FileTest.exists? 和 File.exists? 但是当图像肯定存在时,没有人会告诉我真实的。

有什么我想念的吗?任何指导将不胜感激。我只接触 Ruby 和 Rails 几个月,所以我可能遗漏了一些愚蠢的东西。

4

2 回答 2

9

我想你想要@style.style_image.path而不是.url.

打印出来确定。

于 2013-03-15T02:17:22.920 回答
5

每当您处理磁盘上的 Web URL 和文件时,您都必须小心使用哪个“路径”,并且无论您是在告诉您的代码到哪里找到文件,还是告诉浏览器如何请求该文件,都必须保持直截了当同一个文件。

Web 服务器出于多种原因对用户/浏览器隐藏了操作系统的文件结构,安全性非常高。例如,URL 是相对于服务器的,而不是驱动器的根目录。

您遇到的情况非常普遍,并且每个从事网络编程工作的人都可能遇到或将遇到同样的事情,可能会遇到很多次。

于 2013-03-15T02:56:44.580 回答