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
詳しくは Rails Guides: Active Support コア拡張機能 に書いてありますが、簡単にまとめたもの...
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()
コメント