tusbasaのブログ

業務や勉強中に調べたことを自分用にメモするブログ

2022-01-01から1年間の記事一覧

【CircleCI】push,merge時にテストを回さない方法

以下のいずれかをコミットメッセージに入れる [skip ci] [ci skip] [no ci] [skip actions] [actions skip] 参考 techracho.bpsinc.jp https://docs.github.com/ja/actions/managing-workflow-runs/skipping-workflow-runs

【rails】ActiveRecord::Rollback

transactionの中でActiveRecord::Rollbackが発生した場合ロールバックした後で例外は再送されない。戻り値はnilになる ActiveRecord::Base.transaction do # BEGIN user1.save! # 実行される(ROLLBACKで戻る) raise ActiveRecord::Rollback # ROLLBACK use…

【rspec】system specでsleepは使用しない

JavaScriptを使う操作の後に画面上の表示が変化する場合はfindやhave_xxxを使うとCapybaraが自動的に処理が完了するまで(=画面に変化が現れるまで)待ってくれます。(デフォルトの待ち時間は最大2秒間です) sleepはテストが遅くなる原因になる為使用しな…

【rails】ActionMailer Preview

spec/mailers/previews 以下にActionMailer::Previewを継承したクラスを作成 プレビューには、メールオブジェクトを return するメソッドを実装する rails/mailersにアクセスすると一覧が見れる http://localhost:10000/rails/mailers class UserPreview < A…

【rails】中間テーブルの自動作成

多対多のリレーションを持つモデルの片方を作成する場合 パラメータにもう片方の モデル名+ids のパラメータ名で複数のidを持たせる。 そうすると、そのidと作成するモデル側のidを使って中間テーブルが自動的に作られる。 User has_many :groups, through: …

【Javascript】連想配列の空判定

// 空のオブジェクトを用意 const obj = {}; console.log( Object.keys(obj).length === 0 ); // true また、「key」の長さを取得して「0」であれば「0」は真偽値で「false」扱いとなるので、「!」で反転させることで判定することが可能です。 console.log(!…

【rails】バージョン設定

load_defaultsもnew_framework_defaults_x_xも指定しない場合はどの設定が使われているかわからない。 参考 qiita.com

serviceクラスについて

サービスクラスは原則1つの役割に徹するべき クラス名には動詞と目的語と「Service」を付ける 引数は出来る限りnewで渡してインスタンス化する 1つのサービスにpublicなメソッドは、原則1つにする 初期化したインスタンスはprivateのattr_readerで呼ぶ 切り…

【ruby】メソッド探索の順序

あるクラスのインスタンスメソッドを実行した場合以下のような探索順序になる。 自クラス → includeしたmodule → 継承元1 → 継承元2 *moduleは下に記述したものから探索される 参考 pikawaka.com

【Ruby】reqiureとinclude

・requireは外部ファイルやライブラリを読み込むのに使う ・includeはモジュールをクラス内で呼ぶために使う includeしたファイルに定義しているメソッドは呼び出し元のクラスでインスタンスメソッドとして利用することができる。 参考 pikawaka.com system.…

【ruby】$LOAD_PATH

ライブラリを検索するパスを格納している組み込み変数。 プログラムのどこからでも参照でき、グローバル変数と同様のスコープを持つ。 参考 system.blog.uuum.jp style.potepan.com

rails autoloader

標準でautoload_pathsに含まれるのは以下の6ディレクトリ app/controllers app/models app/helpers app/mailers app/controllers/concerns app/models/concerns 参考 qiita.com

単一テーブル継承

DBにある1つのテーブルを、複数のモデルで共有利用すること。 DBテーブル名と同じクラス(スーパークラス)を作成し、そのスーパークラスを継承するサブクラスを作成する。使用するカラム名はスーパークラス、サブクラスともに同じ。(同じテーブルに紐づく…

WebSocketとは

HTTPプロトコルでハンドシェイクしたのちコネクションを確立して専用のプロトコルで双方向通信を行う。 参考 qiita.com

【rails】scope はnilを返さない

class Post < ApplicationRecord scope :latest_post, ->(user_id) do where(user_id: user_id).last end end Post.latest_post(1) =>すべてのレコードが返る Post.where(user_id: user_id)でnilが返る場合scopeはallを返すような挙動になるので注意。 where…

【rails】バリデーション context 指定方法

save,updateの時はcontextが必要だが、valid?,invalid?の時はシンボルで指定する validates :password, presence: true, on: :change_password user.save(context: :change_password) user.valid?(:change_password) 参考 https://spirits.appirits.com/doru…

【rails】I18 ネストしたモデルの属性名の変更

スラッシュで名前空間を表現する。 config/locales/ja.yml ja: activerecord: attributes: v1/user: name: ユーザー名 参考 https://qiita.com/yutackall/items/9f349101aaefce6043fb

【rspec】インスタンス 生成のタイミング

インスタンス の定義はletで遅延評価にしておき、ネスト下のbeforeの中で必要なインスタンスを作成する方法。 letで定義すると無駄なインスタンス が作成されない。 let(:user) { create: user } let(:item) { create: item } context "xxxxx" do before do …

【Linux】diff -u [ファイル1] [ファイル1]

ファイル1とファイル2の差分をユニファイド形式( 変更を+ -で表現)で表示する。 git diffの形式と同じ。

【Linux】tail -f [ファイル名]

ファイルの内容が書き換えられると、その都度リアルタイムに表示される。

【Linux】& コマンドをバックグラウンドで実行する

cpコマンドをバックグラウンドで実行 $ cp file1 file2 &

【Linux】psコマンド

プロセスを表示 aux すべてのユーザのプロセスを、詳細情報を合わせて表示

【Linux】less

less ファイル名 ファイル内容を画面に収まる量表示 f 先に進む b 戻る

【Linux】mkdir -p

親ディレクトリも含めてディレクトリを作成するpオプションを指定します。 ▼pオプションを指定 $mkdirpreport/2021/01