Ruby

jQuery|リロードしないとプレビュー表示できない→turbolinksが原因【Rails】

写真投稿アプリを作成中に、jQueryを用いてプレビュー表示機能を実装しようとした所、うまくプレビュー機能が機能せず、リロードを行うとプレビュー表示が成功するという問題に直面しました。

調べた所、初心者に多いミスらしく、私自身もJavaScriptにおいてturbolinksの概念が無かったため、解決にかなり時間を要しました。
ネット上でも同じような悩みを抱えている方が多かったため、参考になればと思い手順をまとめました。

動作環境

  • Ruby 2.5.1
  • Ruby on Rails 5.2.4

やりたかった事

写真投稿フォーム

画像を選択

選択した画像がプレビュー表示される

発生した問題

写真投稿フォーム

画像を選択

選択した画像がプレビュー表示されない選択した画像がプレビュー表示されない

リロード

画像を選択

選択した画像がプレビュー表示される

問題のコード

  $(function(){
    fileField = $('#file')
    #選択された画像を取得し表示
    fileField.on('change', fileField, function(e) {
      var file = e.target.files[0]
      var reader = new FileReader(),
      $preview = $("#img-field");
      reader.onload = (function(file) {
        return function(e) {
          $preview.empty();
          $preview.append($('<img>').attr({
            src: e.target.result,
            width: "100%",
            class: "preview",
            title: file.name
          }));
        };
      })(file);
      reader.readAsDataURL(file);
    });
  });

解決方法

$(document).on('turbolinks:load', function() {
  #上記のコードをここに挟む
});

turbolinksによりJSが機能しない時があるとの事。
上記のように囲むことで、この問題は解決するようです。

turbolinksとは

turbolinksとは、一言で言うとWebアプリケーションをすばやく表示させることができるgemのこと。
rails4以降標準で用意されている。

初心者の方や、慣れている方でも忘れることが多いみたいなので、
JSが変だと思ったら、turbolinksを疑ってみましょう。

参考:https://github.com/turbolinks/turbolinks

Ruby on Railsのおすすめ本

Ruby on Rails定番の一冊です。Railsの機能について、プログラミングスクールなどでも教わらない内容も学習できて、理解を深めることができました。
Railsについてもっと詳しく知りたいという方はぜひ読んでみてください。↓↓

  • この記事を書いた人

コウダイ

都内のWeb系自社開発企業に勤務するエンジニア|33歳1児のパパ|ブログ歴4年→月間6,000PV|新卒で手取り18万のホテルマン6年→プログラミングを900時間勉強→100社以上応募しアラサー未経験から7ヶ月でフルリモートのWEB系自社開発エンジニアに転職し年収100万円UP|【人生を自由に、ノンストレスで生きる】をテーマに、30歳で文系・異業種未経験からITエンジニアに転職したノウハウの他、プログラミングやブログで稼ぐ方法など、「時間や場所に縛られずに稼ぐ」方法を発信しています。

-Ruby