業務中の学び / #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認証があるとのこと。
また、認証に使用するトークンは有効期限を設けることが望ましい。
その他詳しいことは割愛させてください。
↑青い部分にトークンを入力する。
参考
# 9/10(金)
*【HTTP】Content-Typeについて
これまたAPI Testerにて、Content-Typeヘッダーが理解できていなかったため調べました。
Content-Type 表現ヘッダーは、リソースのメディア種別を示すために使用します。レスポンスにおいては、 Content-Type ヘッダーはクライアントに返されたコンテンツの実際の種類を伝えます。
リクエストにおいては (POST または PUT などで)、クライアントがサーバーに実際に送ったデータの種類を伝えます。
(MDNより)
つまり、どのような形式なデータかを表す、指定するもののようです。json形式の種類を取得する場合は下記のようにつけます。
参考
さいごに
学んだことを文字としてアウトプットすると理解が深まる。
定期的にやっていきたい。
それではまた。
この記事が気に入ったらサポートをしてみませんか?