问题 Rails File.exist?文件存在时产生错误


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

我在用着:

  • Rails 3.2.11
  • Ruby 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,所以我可能会遗漏一些愚蠢的东西。


8628
2018-03-15 02:15


起源

你需要传递一条路径 File.exist? 不是网址。 - silasjmatson
我不确定为什么你对这个问题没有更高的评价。好问。 +1。 - sscirrus


答案:


我想你想要的 @style.style_image.path 代替 .url

打印出来以确定。


9
2018-03-15 02:17



你们两个是对的,谢谢!我也犯了一个错误,style_image是另一个模型,style_image.image是实际的图像。所以有效的解决方案是 <% if File.exist?(@style.style_image.image.path) %> - Tom Netzband
@TomNetzband当然,很高兴我能提供帮助。将答案标记为正确,以帮助可能遇到同样问题的任何其他人。 - Jorge Israel Peña


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

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

你遇到的是非常普遍的,并且很可能每个正在为网络编程工作的人都会或者将会遇到同样的事情,可能是好几次。


5
2018-03-15 02:56