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_validationafter_validationbefore_savearound_savebefore_createaround_createafter_createafter_saveafter_commit/after_rollback- Active Record コールバック
 
■
■
⑬&:という記法について
- これはRubyのイディオムです(&:メソッド名)
 - その動き方をまとめます
 
[なにしてるの?]
配列の要素1つ1つに(&:メソッド名) のメソッドを呼んでいます。
配列の要素1つ1つに(&:メソッド名) のメソッドを呼んでいます。
['a' ,'b'].map(&:upcase) #=> ["A", "B"]
■
■
⑭


