8/24-調べ
■index
- Bitbucketの二要素認証で、公開鍵を登録するとこける
- model見るときのvalidates inclution {%w}...について
- modelsを全体的に見る
- concernファイルのxxableについて
- IPv6設定のoffについて
- [抽象クラス]:application_record.rbのself.abstract_classについて
- 論理削除のgemであるact_as_paranoidについて
- ActiveRecordの関連付けについて
- belongs_to,has_one,has_manyについて
- act_as_sequencedについて
- attr_accessorについて
- ActiveRecordのコールバックについて
- &:という記法について
■
■
①二要素認証の公開鍵
■
①二要素認証の公開鍵
- 情報がすべて閲覧できない(git commit logとかみれない)ので、bitbucketにて二要素認証をしろとの要請がある
- ssh keygenで発行された公開鍵(pub)の中身を、オプションに登録すればよいと登録した
- しかし、エラーが出た(その SSH キーは既に追加されています)
[対処]
■
②validates inclution {%w}...
[記法]
2.6
%w:配列を作成する
enum:列挙型
■
■
③modelsのconcernで処理の定義
APIコールとか検索とかフィルター処理は無視する
contract/cpe/customer/oemは無視する
後で見る。一覧でのデータの持ち方とかそういうのでしょ。きっと。
仮想UTMってなんだ?
➡slackにて解決
■
■
④IPv6設定のoffについて
■
■
⑤concernファイルのxxableについて
■
■
⑥application_record.rbのself.abstract_class
②validates inclution {%w}...
- Active Record バリデーション
- DB登録前のバリデーション
- 与えられた集合(enum)に属性の値(in: %w[])が含まれているか検証するヘルパー
[記法]
2.6 inclusion
このヘルパーは、与えられた集合に属性の値が含まれているかどうかを検証します。集合には任意のenumerableオブジェクトが使えます。
class Coffee < ApplicationRecord validates :size, inclusion: { in: %w(small medium large), message: "%{value} のサイズは無効です" } end
inclusion
ヘルパーには:in
オプションがあり、受け付ける値の集合を指定します。enum:列挙型
■
■
③modelsのconcernで処理の定義
- Usable/Rulable:メアド、パスワードの検証
- Knockable/Generatable:JWTとかの生成
APIコールとか検索とかフィルター処理は無視する
contract/cpe/customer/oemは無視する
後で見る。一覧でのデータの持ち方とかそういうのでしょ。きっと。
仮想UTMってなんだ?
➡slackにて解決
■
■
④IPv6設定のoffについて
- IPアドレスのホワイトリスト追加において、IPv6設定とIPv4設定の差分で開かないことがあった。
- デフォルト設定は、IPv6で実端末はIPv4で差がある。
- MacでのIPv6ネットワーク設定を切ることで対応
[対応]
(1) IPアドレスの確認 当リンク
- sudo networksetup -setv6off Wi-Fi
- 自動採番なので、普通につなぐ
- OK
■
■
⑤concernファイルのxxableについて
- なぜRailsではsuffixにxxableなのかという疑問
[答え]
- 慣習であり、規約であり、暗黙の了解である
- 機能独立したモジュールであるから、ableで見通しをよくする
■
■
⑥application_record.rbのself.abstract_class
- Modelsの抽象クラス:application_record.rb
- お約束事で、ApplicationRecord < ActiveRecord::Base
- seld.abstract_class = true
- 意味と役割がわからないから、調査する
■
意味:
クラス名に対応したデータベースのテーブルを用意せずにOKとする設定値
クラス名に対応したデータベースのテーブルを用意せずにOKとする設定値
役割:
■
ActiveRecordは、DBとSQLの翻訳機であり、
生ではかけたもんではないSQL文をプログラムで再現して自動生成する機能。
[Rails] self.abstract_class = true の意味と挙動
- ActiveRecordを継承したクラスをモデル作成する
- Rails はそのクラス名に対応したデータベースのテーブルを自動的に探す
- 対応するデータベースのテーブルを用意しない場合は、上記を書く
■
ActiveRecordは、DBとSQLの翻訳機であり、
生ではかけたもんではないSQL文をプログラムで再現して自動生成する機能。
[Rails] self.abstract_class = true の意味と挙動
■
■
⑦act_as_paranoid
⑦act_as_paranoid
- act_as_paranoidというgem
- Railsで論理削除をする場合に使う
- まちがっても消したくないデータを保全する用途で用いる
- 例えばcontract(取引)/customer(顧客)を物理削除すると大事なので
[実装]
class Contract < ApplicationRecord
act_as_paranoid
.....
[挙動]
- destroyメソッドで物理削除されなくなる
- find系で削除したものを取得しないようにする
- 削除されたものを取得できるメソッドが追加
- 削除されたものを復活させるメソッドが追加
下記記事より
■
■
⑧ActiveRecordの関連付けについて
⑧ActiveRecordの関連付けについて
- モデルクラス同士で関係性が存在する
- 関係性を宣言することで、共通操作の実装が簡単になる
- モデルの操作やデータの整合性が一貫する
[用途]
著者と本の関係性に例えられる。
- 著者は一人で本を複数書く。
- 著者は新しく本を書いたら追加する。
- 著者を削除する場合は、複数の本も同時に削除する。
- こうした繋がりを一行でできるための設定が関連付けである。
[6種類の関連付け]
- belongs_to
- has_one
- has_many
- has_many :through
- has_one :through
- has_and_belongs_to_many
詳細は下記ページより
■
■
⑨belongs_to,has_one,has_manyについて
記事①、記事②を参考に作成
[実装]
has_one dependent: :destroyは、親子ともども削除する場合に使う
外部のID(foreign key)を持っているモデルはbelongs_toで、持っていないモデルにはhas_oneという実装上の差。
■
- 対象を1つ持っているなら、has_one
- 対象を複数持っているなら、has_many
- 自分が対象に所属しているなら、belongs_to
(1)
belongs_to
は、自分のテーブルが対象テーブルのレコードに所属する(対象テーブルのidカラムがある)場合に使う。
(2)
has_one
は自分のテーブルが対象テーブルを1つ持っている(複数持たない)場合に使います。対象テーブル側に自分のidのカラムがある場合に使う。
(3)
has_many
は自分のテーブルが対象テーブルを複数もつ場合に使います。対象テーブル側に自分のidのカラムがある場合に使う。記事①、記事②を参考に作成
[実装]
has_one dependent: :destroyは、親子ともども削除する場合に使う
外部のID(foreign key)を持っているモデルはbelongs_toで、持っていないモデルにはhas_oneという実装上の差。
■
■
⑩acts_as_sequencedについて
- Sequencedは、ActiveRecordモデルのスコープ付き順次IDを生成する
- acts_as_sequencedを提供し、各レコードに一意の順次IDを自動的に割り当てる。
- 順次IDはデータベースの主キーの代わりではなく、主キーを公開せずにオブジェクトを取得する別の方法を追加する。
[用途]
ネストしたリソースのIDを連番にしたいとき(link)
■
■
⑪attr_accessorについて
- attr_accessor :settingsみたいになってる
- クラスによって0,1,10と設定数はまちまちである
- インスタンス変数を外部から変更するための設定である
- attr_accessor :(インスタンス変数)で、自由に操作ができる
[そもそも論]
- クラスファイルを作成する
- クラスを生成するときに、インスタンス変数(@xxx)を作る
- クラスの外からは、インスタンス変数の変更はできない
- しかし、変更したいときがあり、そういうときに使う
- attr_accessorの使い方を解説
[StackOverFlowより]
[DBのmigrationとの比較論]
内容は記事を読むとして、用途は
・読み取りも書き込みもできるオブジェクトの属性を定義したい時
attr_reader
は読み出し専用の属性を定義したいときに使い、attr_writer
は書き込み専用の属性を定義したいときに使う。
■
■
⑫ActiveRecordのコールバックについて
実行タイミングを定義する設定
実行タイミングを定義する設定
- オブジェクトにはライフサイクル(生成→消滅)が存在する
- ActiveRecordは、ライフサイクルに対するフックを提供している
- これを使うとアプリやデータの制御ができる
- コールバックとは、オブジェクトのライフサイクル期間において、特定の瞬間に呼び出されるメソッドを指す。
- コールバックを利用することで、イベント発生時に常に実行するコードを書ける
- イベント例、オブジェクトが作成/保存/更新/削除/検証/データベースの読み込み
[実装]
インラインでもブロックでも書ける
[利用可能なコールバック]
色々あるけども、実務上に関わりそうな部分のリストは
■
■
⑬&:という記法について
インラインでもブロックでも書ける
before_create do customer.constracts.each(&:constracted!) end
[利用可能なコールバック]
色々あるけども、実務上に関わりそうな部分のリストは
3.1 オブジェクトの作成
before_validation
after_validation
before_save
around_save
before_create
around_create
after_create
after_save
after_commit/after_rollback
- Active Record コールバック
■
■
⑬&:という記法について
- これはRubyのイディオムです(&:メソッド名)
- その動き方をまとめます
[なにしてるの?]
配列の要素1つ1つに(&:メソッド名) のメソッドを呼んでいます。
配列の要素1つ1つに(&:メソッド名) のメソッドを呼んでいます。
['a' ,'b'].map(&:upcase) #=> ["A", "B"]
■
■
⑭