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

Tom*_*and 11 ruby ruby-on-rails-3

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

我正在使用:

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

我有一个模型"风格",它有一个图像附件,我可以渲染图像

<%= image_tag(@style.style_image) %>
Run Code Online (Sandbox Code Playgroud)

它工作得很好.

简而言之,我想检查文件图像是否实际存在于它应该位于的文件夹中 - 我不想使用@ 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 %>
Run Code Online (Sandbox Code Playgroud)

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

我也试过了

<% if File.exist?(Rails.root + @style.style_image.url) %>
Run Code Online (Sandbox Code Playgroud)

没有运气.我也尝试过使用FileTest.exist?,FileTest.exists?和File.exists?但是当图像肯定存在时,没有人会告诉我.

有什么我想念的吗?非常感谢任何指导.我只有几个月的Ruby和Rails,所以我可能会遗漏一些愚蠢的东西.

Jor*_*eña 9

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

打印出来以确定.


the*_*Man 5

无论何时处理磁盘上的Web URL和文件,都必须小心使用哪个"路径",并且无论是告诉代码在哪里找到文件,还是浏览器如何请求同一个文件.

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

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