読者です 読者をやめる 読者になる 読者になる

雑種のポメラニアン

フリープログラマーの日記とか人生観とか綴るよ

ささやかなActiveRecord用プラグインをリリースした。

JironBach/update_or_create · GitHub

元々はVisualMigrateの保守性があまりにも悪いんで
モデルベースにして、RESTfulに作り直そうとしたんだけど
VisualMigrateはテーブルを使わなかったので
全面的に見直すことにした。

その過程でマスターデータを効率的に管理するにはどうしたらいいか
考えた末、rake db:seedでという結論に至ったのだが
前に
Railsでdb:seedでマスターテーブルを管理するオススメのやり方 - 雑種のポメラニアン
というのを紹介したのだが、これだとレコードの更新と削除が出来ないため
効率的とは言いがたかった。

今回リリースしたupdate_or_delete_or_createは更新と削除が可能。
下記がRSpecから抜粋したテストデータ。

first = [
    { id: 1, value: 'test' },
    { id: 2, value: 'ほげ' },
    { id: 3, value: 'ふが' },
]

second = [
    { id: 1, value: 'test' },
    { id: 2, value: 'ホゲ' },
    { id: 3, value: 'ふが' },
    { id: 4, value: 'JironBach' },
]

third = [
    { id: 1, value: 'test' },
    { id: 2, value: 'ホゲ' },
    { id: 3, 'delete record !!!' => true },
    { id: 4, value: 'JironBach' },
]

firstをupdate_or_createすると3レコード作成され
secondをupdate_or_createするとid=2が更新されて4件になり
thirdをupdate_or_createするとid=3が削除される。

マスターデータはDBを変更してもIDを更新したくないケースが多いので
これはなかなか秀逸なアイディアではないかと自負している。

ちなみにgem名はupdate_or_delete_or_createですが
パッケージ名と関数名はupdate_or_createなのでご注意下さい。
gem名先に取られてました。