Railsで外部ファイルを投稿する方法
RailsでファイルをDBに保存するには、
gemをインストールする必要があります。
- carrierwave → ファイルのアップロード用gem
- mini_magick → ファイルのリサイズ用gem
次に、画像のアップローダーを作成します。
ターミナルに rails g uploader image コマンドを入力すると
app/uploadersディレクトリ内に
「image_uploader.rb」というファイルが作成されます。
このファイルは、元々たくさんの記述があり、多くの項目がコメントアウトされています。
その中の上の方(私は4行目でした)
のコメントアウトを外して有効にします。
また、リサイズの設定をします。
私は解像度の高いもの、低い物2つ用意したかったので
2つの設定を用意しました。
thumb、thumb50 という風に名前で区別をしています。
resize_to_fit: [800, 800]は、縦横幅を維持したまま、縦横を800px以内にリサイズするという意味です。
次に、ファイルをアップロードするテーブルのモデルに下記の記入をします。
私は、tasksテーブルとusersテーブルにimageカラムを作成し、画像を登録したかったので、
app/models/task.rb と app/models/user.rb
の両方に記入しました。
これで準備は完了です!!
仕上げは、ビューへの表示です。
表示する箇所に、
という風に記入します。
thumb50.url の部分で、解像度を指定しています。
ここではクラス名を指定し、CSSでアイコン画像のように装飾しています。
こんな感じのアイコンが作成可能です!
SNSっぽさが出ますね!
imageカラムが空だった場合のデフォルト画像を設定しておく場合は、
app/assets/imagesディレクトリ内にデフォルト画像を保存します。
私はわかりやすく「default.png」という名前で保存しました。
次に、app/uploaders/image_uploaders.rb の真ん中やや上ぐらい(私は17行目でした)
に記述のある、
と、それに対応するendのコメントアウトを外します。
そして、メソッド内にデフォルト画像のファイル名を記入します。
これでデフォルト画像の設定は完了。
チームメンバーの写真を並べてみました。
写真を登録していない二人はデフォルト画像が反映されています。
この技術はSNSっぽいものを作るときにまた使えそうです!
さくっとできるようになりたいものですね〜