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

rails:index_byメソッドで配列をkey-value型hashに変換

配列で受け取ったデータをeachで検索(リニアサーチ)するより、key-value型のhashに変換してkey指定で取得した方が、コストもかからず効率がよい。 index_by メソッドを使うと、key-value型のハッシュに変換してくれる。 ただし、このメソッドは rails(acti…

ruby:hash配列のkey検索

hash配列を指定keyで検索し、取得する。 mast = [{code: "101", name:"abc"}, {code: "201", name:"cde"}, {code: "101", name:"a"}, {code: "102", name:"efg"}, {code: "101", name:"abc"}, {code: "301", name:"b"}] select だと該当する全行を取得(Array…

ruby:csv操作

CSVデータの操作サンプル。 parse すると、array になる。 >> require 'csv' => true >> require 'pp' => false >> s = <<EOS id,first name,last name,age 1,taro,tanaka,20 2,jiro,suzuki,18 EOS >> pp s "id,first name,last name,age\n" + "1,taro,tanaka,20\n" + "2,jiro,suzuki,18\n" => "id,first name,last name,age\n1,taro,t</eos>…

unix:コマンドメモ

よく使うコマンド。 # 環境確認 env # システム状況確認(プロセス、CPU、メモリ等の統計情報) # ctrl + c で中断 top # cpu使用率順 top -a # メモリ使用率順 top -a [PID] # 特定プロセスを監視 top -d1 # 1秒ごとに更新 top | grep ruby # ディスクの使…

git:stashで変更内容を退避、別ブランチに反映

ベースにしていたブランチが更新された時など、 rebaseせずに、変更内容を退避、再反映するには、以下の流れ。 # ブランチ構成が以下 # feature/baseブランチから、devブランチを切って作業中 # master # feature/base # * dev/task001 # 変更を退避(-u は …

rails:migrate実行

db:migrateの実行について。 # modelからgenerate (migrationも作成される) rails g model staffs bin/rails g model staffs #どっちでも # table追加・変更だけのときはmigrationからgenerate rails g migration AddTypeOfGenderStaffs rails g migration C…

SQL:条件付きCOUNT

今まで知りませんでした。 条件付きのcountがこんなに簡単にとれるとは。 select count(*) # 全件 ,count(staffs.type = 1 OR NULL) as byte_count ,count(staffs.type = 2 OR NULL) as part_count from staffs; where staffs.invalid = true 参考:多謝) …

rails:コンソールから生SQLを実行する

以下のように、rails consoleから生SQL実行できる。 戻り値がActiveRecord::Resultなので、hash化すると見やすい。 (hash化しなくても見れる) sql = 'SELECT staff_type, count(*) FROM staffs where is_valid = true group by staff_type order by staff_…

rails:更新系処理の悲観的ロックのサンプル

掲題を実現する場合のサンプル。 処理で更新されるテーブルのモデルに、以下のようなメソッドを実装。 class BatchExecUpdateDate < ApplicationRecord # batch_exec_update_dates # # id :bigint(8) not null, primary key # proc_type :integer not null #…

RSpec:よく使うmatcherメモ

付け足し付け足ししていく予定です。 インスタンスの内容のテスト expect(section).to have_attributes(name: 'default') expect(section.is_valid).to be_truthy expect(section.retired_at).to be nil 件数に変更がない(unchange推奨) expect{subject}.t…

rails:コールバック処理

あらかじめ定義しておき、必要なタイミングで自動で動く処理。 以下だと、Companyがcreateされると、直後にSectionもcreateされる。 (Section.name を仮設定しているのもコールバック) # app/model/company.rb class Company < ApplicationRecord has_many…

ruby:ハッシュ操作の応用1

以下のようなハッシュを画面に返すとする。 # 画面に引き渡すインスタンス変数(Hash) # @conpany_inf カンパニー情報(ヘッダ情報) # { # company_name [string] カンパニー名 # company_started_at [datetime] 創設日 # staff_count [integer] スタッフ人…

rails:コンソールからFactoryBotでデータ作成する

Rspec実行時以外、railsコンソールからもFactoryBotを使ってデータ作成できる。 以下は例。 > c = Company.First > s = FactoryBot.create(:staff, name: 'kenji', company: c) FactoryBot実装済みが前提。 戻り値はインスタンス。

rails:判定ロジックサンプル備忘1

以下のようなケースの判定ロジックを考える。 モデルで以下のように定数定義。 app/models/worker.rb class Worker < ApplicationRecord WORKER_TYPES = { TEACHER: 1, PILOT: 2 }.each_value(&:freeze).freeze end デコレータは以下のように継承して定義。 …

ruby:ハッシュ操作の基本

ハッシュの基本操作。 >> seeds = {"unk"=>0, "par"=>3, "rog"=>1} => {"unk"=>0, "par"=>3, "rog"=>1} >> seeds["par"] => 3 >> seeds_s = {unk: 0, par: 3, rog: 1} => {:unk=>0, :par=>3, :rog=>1} >> seeds_s[:par] => 3 >> a = seeds_s.fetch(:par) => …

ruby:配列(Array)操作の基本

配列の基本操作。 >> names = ['Luf','Zor','Nam'] => ["Luf", "Zor", "Nam"] >> names[0] => "Luf" >> names.size => 3 >> names[4] = 'Uso' => "Uso" >> names => ["Luf", "Zor", "Nam", nil, "Uso"] >> names.push('San') => ["Luf", "Zor", "Nam", nil, …

rails:検索時にリテラルのselect句やjoin句を使う

一般的だと思うけど、覚書。 controllerではモデルのリテラルを指定して検索。 controller/tallent_controller.rb class TallentController < ApplicationController def index @tallents = Tallent.select(Tallent::SELECT_STR) .joins(Tallent::JOIN_STR) …

Markdown:記法メモ

特殊文字をそのまま表示 バックスラッシュでエスケープします。 \``` ``` コード(pre記法) 整形済みテキストの記法 HTMLの<pre>タグに相当 行頭に4つ以上の半角スペースか1つ以上のタブをつける もしくは、段落の前後に「```」ではじまる行をつける 「```ruby」の</pre>…

git:ローカルブランチのリセット

ローカルブランチの状態がおかしくなっており(コンフリクトだらけ)、 リモートの状態を正として上書き更新したい場合、以下コマンドを使用 $ git fetch origin $ git reset --hard origin/master masterがブランチ名 ブランチ名に/があっても、そのまま記…

開設

web開発初心者のおっさんが記す、主にナレッジ蓄積用のブログです。 ruby, railsに挑戦中です。。。