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

时间:2013-03-15 02:15:05

标签: ruby ruby-on-rails-3

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

我正在使用:

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

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

渲染图像
<%= image_tag(@style.style_image) %>

它运作得很好。

简而言之,我想检查文件图像是否实际存在于它应该位于的文件夹中 - 我不想使用 @ style.style_image.present?来检查图像,因为只检查db记录。我想使用 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,所以我可能会遗漏一些愚蠢的东西。

2 个答案:

答案 0 :(得分:9)

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

打印出来以确定。

答案 1 :(得分:5)

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

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

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