画像アップロード機能を追加する
翻訳者: Mai Muta, @maimux2x
前のガイドまでで作成したアプリに対して想像力を膨らませるために、写真や絵などの視覚的な要素があると便利です。idea modelにファイルアップロード機能を追加することで、画像を添付することができるようになります。
Ruby gem をインストールしよう
Railsにファイルをアップロードする機能を追加するには、ライブラリをインストールする必要があります。
プロジェクトディレクトリ内の Gemfile
を開いて、この行の直後に、
次の一行を追加します。
サーバーを起動中の場合はターミナル上で、Ctrl+Cを押して、終了させましょう。
続いてターミナル上で、次のコマンドを実行してください。
これにより先ほど Gemfile
ファイルに追加した carrierwave gem
がインストールされます。
ライブラリ(Ruby gems)とは何か、なぜ便利なのかを説明しましょう。同様にオープンソースソフトウェアとは何かについて説明をお願いします。
Resources: RubyGems GitHub introduction and Wikipedia OSS
画像アップローダーを生成しよう
次に、ファイルのアップロードを処理するためのコードを生成します。ターミナルで次のコマンドを実行しましょう。
アップローダーが見つからないというエラーが表示される場合は、以下の行も追加してください。
このgemを追加した場合は、ターミナルアプリで以下のコマンドを実行してください。追加したgemをインストールした上で、再度ファイルアップロード生成のためのコマンドを試してみてください。
idea model に画像アップローダーを実装しよう
ここまでで、アプリ内で写真をアップロードする方法の下準備が整いました。しかし、新規でデータ登録をする際にフィールドのどこに画像をアップロードしたいかをRails側に伝えるため、もう少し手を加える必要があります。
テキストエディタで app/models/idea.rb
ファイルを開いてください。このファイルは、データをデータベースに保存し、保存したデータを取得して画面に表示するために使用されます。どのフィールドがファイルアップロードを処理するかをRailsに伝えるために次の手順でコードを変更します。
次の行の直後に
以下を追加して保存します。
この mount_uploader
行は、idea modelに対して picture
フィールドがファイルアップロードの役割を持つことを伝えています。このフィールドにファイルアップロードに関する情報を保存し、後ほど画面に表示します。
画像をアップロードしよう
これで、idea modelは picture
フィールドからファイルアップロードを行えることを理解したので、テキストフォームになっている picture
フィールドを、画像を選択するように変更することができます。
app/views/ideas/_form.html.erb
を開いて以下の箇所を
次のように変更して保存します。
rails server
を実行してRailsサーバーを起動します。
ブラウザでhttp://localhost:3000/ideas/newを開きましょう。 新しいフォームでは、 picture
フィールドに初めとは異なる要素が表示されるようになりました。テキストフィールドの代わりにファイル選択ツールが表示され、「参照…」または「ファイルを選択」ボタンに変更されています。
新しいデータを登録するためにフォームに情報を記入し、今回は新たに実装した画像アップロード機能を使って画像も選択します。あなたのパソコンにある任意の画像で構いません。
場合によっては、 TypeError: can’t cast ActionDispatch::Http::UploadedFile to string というエラーが起きることもあります。エラーになった場合は、 app/views/ideas/_form.html.erb
の
上記のコードを、以下のように変更してみてください。
画像を表示させよう
これで、画像を登録することができるようになりました!しかし、今はまだデータを保存してもファイル名しか表示されないので、登録した画像を見ることができません。画像が表示されるようにコードを変更しましょう。
画面上に画像を表示するためには, app/views/ideas/_idea.html.erb
(app/views/ideas/show.html.erb
で呼び出している部分テンプレート) を開いて以下の部分を
このように編集して保存します。
image_tag
を使うことで、画像データが存在する場合に、該当の画像を表示するようにRails側に指示しました。画像を登録していない場合には、画像は表示されません。
ブラウザを更新しましょう。アップロードした画像が表示されるはずです!
画像データは .gitignoreに指定しよう
デフォルトでは、アプリはすべての画像をローカルに保存するため、開発中は問題ありませんが、アプリのソースコードと一緒に画像データを保存することは避けたいところです。
.gitignore
ファイルを開き、一番下に次の行を追加しましょう。
ガイドを進めていて行き詰まったときはコーチに助けてもらいましょう。また Ruby、Rails、コンソール、テキストエディタについての便利なチートシート も参考にしてみてください。
ガイド
- ガイド 1: はじめに
- ガイド 2: ツールについて知ろう
- ガイド 3: Railsインストールガイド
- ガイド 4: はじめてのアプリを作る
- ガイド 5: HTMLとCSSを使ってアプリをスタイリングしよう
- ガイド 6: アプリに新しいページを追加しよう
- ガイド 7: あなたのアプリに新しいホーム画面を追加しよう
- ガイド 8: 画像アップロード機能を追加しよう (このページです!)
- ガイド 9: GitHub であなたのアプリのコードを公開しよう
- ガイド 10: これらのサービスのどれかで あなたのアプリをインターネットに公開しよう
- ガイド 11: HTML & CSS を使ってデザインしてみよう
- ガイド 12: あなたのアプリにコメント出来るようにしましょう
- ガイド 13: Carrierwave を使って画像をリサイズしよう
- ガイド 14: RSpecでアプリをテストしよう