見出し画像

業務中の学び / #9.6~9.10

としまつです。
9/6(月)~9/10(金)の業務の中で学んだことのメモをnoteにまとめました。
主にRailsについての学びを1日1トピックで雑に書いています。

# 9/6(月)

*【Rails】delegateについて
deligateを使うことで、他のクラスのメソッドをメソッドチェーンで呼び出す必要なく書けるようになるものです。下記にコード例を書きます。

class User < ApplicationRecord
  // 関わりがないコードは省略しています
  has_one :employee

  delegate :name, to: :employee, prefix: true
end

呼び出し例は下記の通りです。下の例では、userインスタンスからメソッドチェーンすることなくemployeeのnameが取得できています。

user.employee_name

ここで user.name となっていない理由は prefix オプションの影響です。
:prefixオプションについては、Railsガイドで次のようにありました。

:prefixオプションがtrueの場合、一般性が低下します(Railsガイド v6.1より)

ここだけ読んでも何のことやら?となります。
下の方に説明がありました。

:prefixオプションをtrueにすると、生成されたメソッドの名前にプレフィックスを追加します。これは、たとえばよりよい名前にしたい場合に便利です。(Railsガイド v6.1より)

つまり、名前が表す動作や意味が分かりやすくなる → 名前の特殊性が高くなる → 一般性が低下する ということなのでしょう。


参考


# 9/7(火)

*【Rails】precisionについて
Railsにおいてカラムの作成や追加時に適用できるオプションの一つです。
このオプションを指定することでカラムの精度を上げることができます。

Railsガイドには下記の記載がありました。

precision: decimalフィールドの精度 (precision) を定義します。この精度は、その数字の総桁数で表されます。
scale: decimalフィールドの精度 (スケール: scale) を指定します。この精度は小数点以下の桁数で表されます。
(Railsガイド v6.1より)

decimal型とは指定した桁数の十進数の数値を正確に格納できるものです。
このprecisionオプションですが、decimal型とdatetime型では扱いが異なっているようです。
Rails6からtimestampsにデフォルトでprecisionオプションがつくようになっていますが、timestampsはdatetime型であり、ここで使用するprecisionは小数点以下の桁数を示すようです。

サンプル(schema.rb)

create_table "users", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
  // 中略 //
  t.datetime "created_at", precision: 6, null: false
  t.datetime "updated_at", precision: 6, null: false
  // 中略 //
end

登録されるデータのサンプル。

mysql> select * from users;
+----+-------+----------------------------+----------------------------+
| id | name  | created_at                 | updated_at                 |
+----+-------+----------------------------+----------------------------+
|  1 | Matsu | 2021-09-07 12:51:46.333472 | 2021-09-07 12:51:46.333472 |
+----+-------+----------------------------+----------------------------+
1 row in set (0.00 sec)

まとめ
decimal型にて、precisionは全体の桁数、scaleは小数点以下の桁数を示す。
datetime型にて、precisionは小数点以下の桁数を示す。

参考


# 9/8(水)

*Makefileについて
ざっくり言うと開発にて普段使用するコマンドを共通化して楽に使うことができるようになるもの。

サンプル (Makefile / Rails用)

db-create: ## DB Create
	bundle exec rails db:create

db-migrate: ## DB Migration
	bundle exec rails db:migrate

db-seed: ## DB test data seed
	bundle exec rake db:seed

呼び出し方

$ make db-crate

参考


# 9/9(木)

*【HTTP】Authorizationリクエストヘッダーについて
API TesterにあったAuthorizationヘッダーについて理解ができていなかったため調べました。トークンを使った認証・認可の方法のひとつとして、Authorizaitonヘッダを用いたbearer認証があるとのこと。
また、認証に使用するトークンは有効期限を設けることが望ましい。
その他詳しいことは割愛させてください。

スクリーンショット 2021-09-11 20.55.12

↑青い部分にトークンを入力する。

参考


# 9/10(金)

*【HTTP】Content-Typeについて
これまたAPI Testerにて、Content-Typeヘッダーが理解できていなかったため調べました。

Content-Type 表現ヘッダーは、リソースのメディア種別を示すために使用します。レスポンスにおいては、 Content-Type ヘッダーはクライアントに返されたコンテンツの実際の種類を伝えます。
リクエストにおいては (POST または PUT などで)、クライアントがサーバーに実際に送ったデータの種類を伝えます。
(MDNより)

つまり、どのような形式なデータかを表す、指定するもののようです。json形式の種類を取得する場合は下記のようにつけます。

スクリーンショット 2021-09-11 22.09.46

参考


さいごに

学んだことを文字としてアウトプットすると理解が深まる。
定期的にやっていきたい。

それではまた。

この記事が気に入ったらサポートをしてみませんか?