【发布时间】:2019-03-26 23:17:42
【问题描述】:
我在 Rails 5.2.2.1 上使用 Carrierwave gem。当数据库中不存在该记录的图像时,我将其设置为图像的默认 URL。但是,如果我在数据库中有用于记录的图像,但磁盘上不存在该文件,我如何让它也显示出来?
目前,我收到以下错误:
ActionController::RoutingError(没有路由匹配 [GET] "/uploads/player/314c38a9-6567-4faa-bfda-9e7a75cbaed4.jpeg")
有没有办法拯救和呈现我在上传器文件中指定的默认网址?
【问题讨论】:
-
这里有些奇怪,因为你得到的是
RoutingError,而不是实际的404。你有路由设置来处理GET /uploads/player/*吗?这似乎也有点像数据完整性问题。如果磁盘上不存在这些文件,我会将它们从数据库中删除。然后您的应用程序代码可以识别该记录没有文件。 -
@mroach,我似乎在任何地方都没有设置该路线。我同意这是一个数据完整性问题,因为该文件不再存在于磁盘上,应该被删除。但仍在试图弄清楚是否有办法做到这一点,而不是编写一个可以运行并经常检查文件是否在磁盘上的脚本
-
问题似乎是您的数据库记录有根本没有处理的文件路径。例如,我希望
/uploads/player/*路由由静态文件服务处理,但 Rails 正试图像普通路由一样处理它。因此,只要您的数据库生成错误的路径,您就会遇到路由错误。 @ilyaostov 的解决方案是避免这种情况的方法。
标签: ruby-on-rails carrierwave actioncontroller