Rails で静的コンテンツをそのまま表示する方法

環境

  • Rails5.1.1
  • Ruby2.4.1

Rails で静的コンテンツをそのまま表示する

既存のコンテンツを Rails でそのまままるっと表示したい(移植したい)場合があると思います*1。たとえば Bootstrap のサンプルファイルをそのまま使ったりだとか、過去の静的サイトをアーカイブ的に参照するために置いたりとか……。

そういう場合の方法です。

結論

public/配下に置く。

上記の場所に置いたときにウェブブラウザでアクセスするアドレスは、例えばpublic/cats/index.htmlという構造でファイルを置いた場合はhttp(s)://hostname/cats/index.htmlになります。Apachenginxにおいてpublic_html/配下を考えた場合と同じですね。

補足

public/配下以外に置こうとする場合

public/配下以外に置くとなると、画像やスタイルシート、JavaScriptなどのファイルについて「アセットパイプライン」の問題で非常に面倒なことになります。ここはもうpublic/に素直に置きましょう。

各ビューからのpublic/配下ファイルへのアドレス指定

public/以下にファイルを置いた場合に、Rails の View からそのファイルへのリンクはどのように記述すればいいのでしょうか。答えは一言で言えば、ルートからの位置 になります。

具体的には以下のようになります。

例えばpublic/cat.jpgには<img src="/cat.jpg">でアクセス(表示)できます。

例えばpublic/my_cats/pretty_cat.jpgには<img src="/my_cats/pretty_cat.jpg">でアクセス(表示)できます。

CSS や JavaScript の場合も同様です。「ルートから」であることを忘れないようにして既存のソースに「最初のスラッシュ」を付与する置換を施せば*2最低限の労力で配置できるでしょう。相対指定で書かれている場合はそのままで大丈夫です。

app/assets/か、public/

画像などのファイルをapp/assets/に置くかpublic/に置くかでもちろん違いがあります。例えば以下のページなどを参考にしてみてください。

コントローラでの指定

コントローラでは単純にフルパスを記載すればいいです。その際、Rails.rootを使うとスッキリと書けるでしょう。

*1:きっとあります

*2:これで私はちょいハマりました……

Powered by はてなブログ