1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rails 404エラー画面を設定した時にrefileで設定した画像が表示されなくなる

Posted at

概要

備忘録代わりに書かせていただきます

Railsでroutesの最下行に

routes.rb
get '*path', to: 'application#render_404',

でどのパスにもいかなかった場合に404エラーを独自で出力するように設定した場合に、
Refile等で指定されたattachment_image_tagの画像が表示されない。

原因

ログを見たらすぐに分かるんですけど、attachment_image_tagでURLを生成して、GETを送ってRoutesを通る時にrefileではroutesの設定が無いので、当てはまるパスがなく404のgetを返してしまうという話。

#解決法
もっと綺麗なやり方があるのかもしれないですけど、とりあえずRoutesのconstraintsを使ってrequestオブジェクトのurlに"attachments/"が含まれている場合は404の行を通らないようにして回避しました。

もっといい方法100%あるような気がするので、よかったらコメントで教えていただけると嬉しいです。

routes.rb
class ErrorAvoid
  def initialize
    @url = "attachments/"
  end
 
  def matches?(request)
    @url.include?(request.url)
  end
end

Rails.application.routes.draw do
  get '*path', to: 'application#render_404',
    constraints: ErrorAvoid.new
end

とりあえず当面はこれで回避できます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?