Rails で config/routes.rb
に root
メソッドを記述しないと /
にアクセスしたとき、Rails の "Welcome aboard" ページが表示される。
これを解消するには、ふつう root
を適当なコントローラの #index
なりのアクションにマッピングするだろうが、コントローラを作らずに短い記述で /
を 404 (Not Found) にする方法を教えてもらった。
やり方
# config/routes.rb
Rails.application.routes.draw do
root to: ->(env) { [404, {}, []] }
end
このように、Rack インタフェースに準拠した Proc オブジェクトにマッピングすればよい。
もちろん、404 以外も可能で、 [200, {"Content-Type" => "text/plain"}, ["OK"]]
なども可能だ。
/
をアプリケーションロジックで扱わない場合に使えるテクニックだと思う。
引数の env について
これを省略すると、他の Rack Middleware から @app.call(env)
と呼びだされた場合にエラーになるようだ。