TECH EXPERT 58日目

TECH::EXPERT

modelのコールバックはvaludationかけたり、保存前に成形したり、実は使うべき機能が沢山あるのね。知らなかった。もっともっと有効活用しよう。

基礎

\u3000 全角スペース

git

<理由>
一度コミットしたファイルについては、その後.gitignoreに追加したとしてもGitの管理下から外されず、pushされてしまう。

<対処方法>
(例)
・ターミナルで
 > git rm --cached secrets.yml
 を実行しGitで管理されないようにする。

・secrets.ymlには直接キーを記述せず、環境変数を参照するようにする。

rails

stylesheets/application.css

*= require_tree . はアセットパイプラインの仕組みを使ってインポートする。sprocketというgemが関与。
scssのimportはscss側の機能。

activeSupportのstringメソッド

ActiveSupportのString拡張(活用形)まとめ - Qiita
詳しくはRailsGuides:ActiveSupportコア拡張機能に書いてありますが、簡単にまとめたものがほしかったので適当に抜き出してまとめてみました。pluralizeレシー…

before_validation


class User < ApplicationRecord
  before_validation :normalize_name, on: :create
 
  # :onは配列を取ることもできる
  after_validation :set_location, on: [ :create, :update ]
 
  private
    def normalize_name
      self.name = name.downcase.titleize
    end
 
    def set_location
      self.location = LocationService.query(self)
    end
end

modelのcollback

before_create :change_tweet

def change_tweet
  self.text = text + "!"
end

selfは多くの場合省略できるが、
セッターメソッドを使う場合のselfは省略できないため、左辺のselfは必須。

https://railsguides.jp/active_record_callbacks.html#利用可能なコールバック

python

n文字目からm文字目まで切り出す

nは0始まりのインデックスだが、mの方はm番目を含まない。

string[n:m]

s = "hogehoge"
s[1:3]
=> og
s[:3]
=> hog
s[3:]
=> ehoge

.replace(”, ”)

文字列の置換
置換したい文字列、置換後の文字列の順で指定する。

text.replace('\u3000', ' ')

文字の式展開

%s, %d
%(key)s {key: value}
展開式の中でフラグを用いることもでき、ハッシュで渡してあげると相当するvalueを代入する。

cur.execute('insert into reports (code, filing_date, name, title, title_full, quarter, year_start, year_end, period_end, previous_year_start, previous_year_end, previous_period_end) values (%(code)s, %(filing_date)s, %(name)s, %(title)s, %(title_full)s, %(quarter)s, %(year_start)s, %(year_end)s, %(period_end)s, %(previous_year_start)s, %(previous_year_end)s, %(previous_period_end)s)', dict)

辞書型

値の追加

dict[“key”] = value
で値を追加する。rubyのように:hogeとシンボルでは書かない。
式展開させる場合は””を付けなければ勝手に展開される。というより文字列を積極的に渡す場合に””を付与する感じ。

keyがすでに存在すれば上書きされ、keyが存在しなければ新規に追加される。

dict[m.group()] = r.text

key名を変更する。

基本的にkeyは変更できない。
必要な場合は、該当するkeyを削除し、新たなkeyを追加する。

dict[new_key] = dict.pop(old_key)

pop()を利用すると引数で指定したkeyを削除する。
と同時に削除したkeyに対応するvalueが返り値として戻る。
これを利用すると上のように簡潔に書ける。

DB

タイムスタンプの保存

tableにデータを保存する際にcreate_atやupdated_atなどの入力を求められる。

import time    
time_stamp = time.strftime('%Y-%m-%d %H:%M:%S')

上記のようにタイムスタンプを格納して該当カラムへ保存させる。
dict["created_at"] = time_stamp

datetimeでも同じことができるが好きな方を使いましょう。
import datetime
datetime.datetime.now()

コメント