【问题标题】:Rails 3 Doesn't Look In Public Folder For Assets On Show MethodRails 3 不在公用文件夹中查找资产 On Show 方法
【发布时间】:2012-06-26 20:58:15
【问题描述】:

每当我尝试使用 image_tag 构建器显示图像时,在我的显示视图中,rails 不会在我的显示视图内的公用文件夹中查找图像...

例如:

<%= image_tag "thumbnails/fish.jpg" %>

会产生这个:

ActionController::RoutingError (No route matches [GET] "/uploads/thumbnails/fish.jpg"):

出于安全原因,我将回形针 Gem 用于我的上传模型,并且 我将上传保存到与公共文件夹不同的文件夹,是的,此显示视图确实出现在上传中控制器...

在我的上传模型中,我使用这一行将上传内容保存到非公共文件夹:

has_attached_file :upload,  :path => ":rails_root/:class/:id/:basename.:extension",
                            :url => ":rails_root/:class  /:id/:basename.:extension"

耙路线:

upload GET    /uploads/:id(.:format)                                                                 {:action=>"show", :controller=>"uploads"}
       PUT    /uploads/:id(.:format)                                                                 {:action=>"update", :controller=>"uploads"}
       DELETE /uploads/:id(.:format)                                                                 {:action=>"destroy", :controller=>"uploads"}
              /download/:id(.:format)                                                                {:controller=>"uploads", :action=>"download"}

编辑 注意:如果我明确地创建一个 img 标签并将 src 指向我的图像,它在我的显示视图上工作正常,所以我认为这不是权限问题。

【问题讨论】:

  • 图片的确切路径是什么?
  • rails_app/public/images/thumbnails/image.jpg

标签: ruby-on-rails-3 routing get paperclip


【解决方案1】:

答案很简单,我不敢相信 Rails 会这么挑剔,但我需要在路径的开头添加一个正斜杠,如下所示:

"thumbnails/fish.jpg"

变成

"/thumbnails/fish.jpg"

我仍然很好奇为什么这只是非索引视图的问题...

【讨论】:

  • 非索引视图是指不是http://example.com/,而是http://example.com/someviewhttp://example.com/anotherview 的那些?如果是,那么区别在于:前导斜杠定义了索引视图的绝对路径;没有前导斜杠,它是一个相对路径,这意味着您正在访问/someview/thumbnails/fish.jpg,这是错误的路径。
  • 我的意思是索引路径。显然,GET /model GET /model/id 在提供资产时是有区别的。要么是那个,要么是我的路线有问题。
【解决方案2】:

您可能需要将此行更改为 true:

config.serve_static_assets = false

在环境/*.rb 文件中(例如 development.rb)。

或者我已经看到这是相关目录的权限问题,因此目录上的 CHMOD 777 可能会解决它/为您指明正确的方向。

这是关于类似问题的SO ticket

【讨论】:

  • 我的任何 enviroment.rbs 中实际上都没有该行 - 我使用的是 Rails 3.1.3
  • 它不存在,因为它已经默认为 false,但您可以添加它,将其设置为 true
猜你喜欢
  • 1970-01-01
  • 2011-02-16
  • 2016-11-06
  • 2015-04-13
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 2017-09-02
相关资源
最近更新 更多