8/24-調べ

■index
  1. Bitbucketの二要素認証で、公開鍵を登録するとこける
  2. model見るときのvalidates inclution {%w}...について
  3. modelsを全体的に見る
  4. concernファイルのxxableについて
  5. IPv6設定のoffについて
  6. [抽象クラス]:application_record.rbのself.abstract_classについて
  7. 論理削除のgemであるact_as_paranoidについて
  8. ActiveRecordの関連付けについて
  9. belongs_to,has_one,has_manyについて
  10. act_as_sequencedについて
  11. attr_accessorについて
  12. ActiveRecordのコールバックについて
  13. &:という記法について




①二要素認証の公開鍵
  • 情報がすべて閲覧できない(git commit logとかみれない)ので、bitbucketにて二要素認証をしろとの要請がある
  • ssh keygenで発行された公開鍵(pub)の中身を、オプションに登録すればよいと登録した
  • しかし、エラーが出た(その SSH キーは既に追加されています)
[対処]
その SSH キーは既に追加されています
➡追加者に、公開鍵情報を消してもらって、自分で改めてssh-keygenすること。


②validates inclution {%w}...


[記法]

2.6 inclusion

このヘルパーは、与えられた集合に属性の値が含まれているかどうかを検証します。集合には任意のenumerableオブジェクトが使えます。
class Coffee < ApplicationRecord
  validates :size, inclusion: { in: %w(small medium large),
message: "%{value} のサイズは無効です" }
end
inclusionヘルパーには:inオプションがあり、受け付ける値の集合を指定します。
%w:配列を作成する
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とする設定値
役割:

  • ActiveRecordを継承したクラスをモデル作成する
  • Rails はそのクラス名に対応したデータベースのテーブルを自動的に探す
  • 対応するデータベースのテーブルを用意しない場合は、上記を書く


ActiveRecordは、DBとSQLの翻訳機であり、
生ではかけたもんではないSQL文をプログラムで再現して自動生成する機能。
[Rails] self.abstract_class = true の意味と挙動


⑦act_as_paranoid
  • act_as_paranoidというgem
  • Railsで論理削除をする場合に使う
  • まちがっても消したくないデータを保全する用途で用いる
  • 例えばcontract(取引)/customer(顧客)を物理削除すると大事なので
[実装]
class Contract < ApplicationRecord
act_as_paranoid
.....
[挙動]
  • destroyメソッドで物理削除されなくなる
  • find系で削除したものを取得しないようにする
  • 削除されたものを取得できるメソッドが追加
  • 削除されたものを復活させるメソッドが追加


ActiveRecordの関連付けについて

  • モデルクラス同士で関係性が存在する
  • 関係性を宣言することで、共通操作の実装が簡単になる
  • モデルの操作やデータの整合性が一貫する
[用途]
著者と本の関係性に例えられる。
  • 著者は一人で本を複数書く。
  • 著者は新しく本を書いたら追加する。
  • 著者を削除する場合は、複数の本も同時に削除する。
  • こうした繋がりを一行でできるための設定が関連付けである。
[6種類の関連付け]
  1. belongs_to
  2. has_one
  3. has_many
  4. has_many :through
  5. has_one :through
  6. has_and_belongs_to_many
詳細は下記ページより

⑨belongs_to,has_one,has_manyについて

  • 対象を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 :(インスタンス変数)で、自由に操作ができる
[そもそも論]
  1. クラスファイルを作成する
  2. クラスを生成するときに、インスタンス変数(@xxx)を作る
  3. クラスの外からは、インスタンス変数の変更はできない
  4. しかし、変更したいときがあり、そういうときに使う
  5. 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つに(&:メソッド名) のメソッドを呼んでいます。

['a' ,'b'].map(&:upcase) #=> ["A", "B"]

Next Post Previous Post
No Comment
Add Comment
comment url