テックキャンプ76日目

kobasaです(´ω`*)ようやく副反応が治まってきました。
しばらくロクに歩いていなかったので職場で変な歩き方してた気がしますw

76日目の勉強内容

今日は投稿機能の実装をしていました。
ActiveStrageを導入しての画像投稿は、初回の学習でよくわからなかったんで苦手意識が強かったんですよね(´・ω・`)
でも今回の実装ではかなりシンプルな使い方なのか「こんな短い記述でいいんやっけ?」って感じでサラッと終わってしまいました。あってんのかな?

今回の実装課題は作業項目のチェックごとに回答が無いのと、作業内容がそんなに細かく書いてないんですよね。
「言われなくても常識的に考えてその内容は必要だよね?」「なんで勝手にそのコード(不要なのに)記述したの?」ってことにならない判断を試されてんのかな。

最終提出までもどかしい思いをしながら進めていくことになる気がします。
今のところエラーなく動いてはいる。気がする。

メモ

マイグレーションファイルについて

マイグレーションファイルにreferences型を記述する場合、参照するモデル名を記述することでテーブルにモデル名_idというカラムが作成される。

t.references :user, foreign_key: true
#テーブルにはuser_idのカラムが作成される

画像アップロード関連

ActiveStorageというGemを使用すると、画像ファイルのアップロードを簡単にするメソッドを使用でき、画像を保存するテーブルを簡単に作成できる。

rails active_storage:install
rails db:migrate

テーブルに保存された画像を加工して表示するには、
ImageMagickというソフトウェアが必要。Gemではないので一度インストールすれば良いと思う。

brew install imagemagick

ImageMagickをRailsで使用するためにMiniMagickとImageProcessingというGemをインストールする。Gemファイルに記述し、bundle install

gem 'mini_magick'
gem 'image_processing', '~> 1.2' #バージョンの記述が必要

作成したActiveStrageのテーブルに画像を保存するには、
投稿データを扱うモデルにActiveStrageとのアソシエーションを記述する必要がある。

  has_one_attached :image

has_one_attachedmメソッドはレコードと添付ファイルが1対1の関係を表す。
:imageの部分がファイル名と呼ばれる部分で、添付するファイルの種類がわかるように名付ける。
モデル.ファイル名の記述で、添付されたファイルにアクセスできるようになる。
またファイル名はモデルが紐付いたフォームからのパラメーターのキー名にもなる。

createアクションの条件分岐

フォームから送られてきたパラメーターをDBに保存する場合。

createメソッドを使用:
インスタンスの生成と保存を同時に行うことができる。
クラスから実行可能なメソッド。返り値は生成されたインスタンス。

saveメソッドを使用:
インスタンスを保存するメソッド。生成はnewメソッドで行う必要がある。
インスタンスから実行可能なメソッド。newはクラスから実行可能なメソッド。
返り値はバリデーションで検証された結果保存できたかどうかのtrueかfalseになる。
この返り値を条件分岐に使用する。

  def create
    @prototype = Prototype.new(prototype_params)
    if @prototype.save #返り値がtrueなら以下を実行
      redirect_to root_path
    else #返り値がfalseなら以下を実行
      render :new
    end
  end

コメント

タイトルとURLをコピーしました