30DAYSトライアル4th(Rails)DAY21(仮)の課題は「Progate Rails コース(7章まで)」です。
としているのは東京フリーランスの記事ではDAY20までしか記載されていないので、僕がその続きを勝手にあってるだけなので、DAY21(仮)としています。
目次
30DAYSトライアル4th(Rails)DAY21(仮)の学習内容
- 画像名をデータベースに保存する:テーブルにカラムを追加
- 画像をアップロードする:画像の送信、保存
画像名をデータベースに保存する:テーブルにカラムを追加
マイグレーションファイルを作成する:rails g migration
モデルを作成した「rails g model モデル名 カラム名:データ型」だとマイグレーションファイルだけでんかう、モデル自体も作成されてしまうので、カラムの追加などの既存のテーブル(モデル)の修正には使用できない。
モデルを作成せずにマイグレーションのみを作成する場合は以下のコマンドを実行する
1 |
$ rails g migration ファイル名 |
ファイル名は自由に指定できるが、追加するカラム名などを含めるのが好ましいく、作成するとファイル名の先頭にはファイルの作成日時が自動的に追加されて「db/migrate/YYYYMMDDHHMMSS_ファイル名」に作成される。
マイグレーションファイルの仕組み
作成したマイグレーションフィアルはRubyのコードになっている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class ファイル名をclass名っぽくした名前 < ActiveRecord::Migration[5.0] def change # rails g modelを実行した場合はテーブル作成のコードが書かれた状態で作成される # 例) create_table :テーブル名 do |t| t.データ型:カラム名 t.tiimestamps end #カラムを追加する場合は自分でチャン気メソッドの中身を記述する必要がある。 add_column :テーブル名, :カラム名, ;データ型 end end |
上記のようにchangeメソッドに「add_column :テーブル名, :カラム名, データ型」を記述する必要がある。
画像を表示する:img
通常のHTML同様imgタグで画像の表示を行える。その際に<%= %>で囲めば画像の保存場所をRubyで記述することが可能。
画像をアップロードする:画像の送信、保存
画像選択ボタン:input type=”file”
inputタグのtype属性に「file」を指定することで、画像ファイルを選択するボタンを表示することができる。
1 |
<img src="<%= "/フォルダ名/#{モデル名.カラム名}" %>"> |
画像の送信:multipart: true
現時点では詳しく理解する必要はなく、画像を送信したい場合はform_tagの引数に「{multpart: true}」を指定する」と覚えておく
1 2 3 |
<%= form_tag("...", {multipart: ture}) do %> <% end %> |
ファイルを作成する:File.write
Rubyでファイルを扱う場合は、「Fileクラス」を使用する。
その中でファイルを作成するには「writeメソッド」を使用する。
1 |
File.write("保存先", "ファイルの内容") |
画像を受け取る:params配列から取得する
inputタグで入力した画像ファイルはテキストと同様に[params[:name属性の値]」で取得できます。
画像の保存:File.binwrite
画像は特殊なファイルなので、FIleクラスの「binwriteクラス」を使用して保存する必要がある。
また、ビューから受け取った画像データは「変数名.read」で取得することができる。
1 |
File.binwrite(ファイルの保存場所, 変数名.read) |
まとめ
30DAYSトライアル4th(Rails)のDAY21(仮)は既存テーブルへのカラム追加と画像などのファイル操作についての学習で、新しいことが目白押しでしたね。
ユーザー管理などをするうえではファイルのアップロードは必須ですからね。
ファイルのダウンロードはファイルの作成場所をコントロールすることで可能なのかなぁ。
まぁそれは次の回で出てくるのかな。
僕はひたすら頑張るのみ。