概要
備忘録代わりに書かせていただきます
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
とりあえず当面はこれで回避できます。