マスターデータの管理(seed-fu)

概要

Ruby on Railsではマスタデータを管理する仕組みとして、seedが提供されている。 この機能でマスターデータの投入を行うこともできるが、若干手間なので、seed-fuを使用している。

使い方

  • db/fixtures/の下に.rbを作るか、db/fixtures/[ENVIRONEMNT]/.rbを作る。
    • 後者はRAILS_ENVが一致した場合のみ流れる。
  • 実行するのは以下のコマンド
    bundle exec rake db:seed_fu
    
  • 特定のカラムにより、重複チェックしてスキップするなど便利な機能があるので、マニュアルは一通り見たほうが良い

TIPS

  • 流れる順番はファイル00_とか01_とか数字を付けて制御。
    • 同時に流れても問題ないものは重複させる
  • 全環境で流すファイルをfixtures直下においてしまうと、そちらが先に実行されてからENVIRONEMENTの下が流れる。
    これはデータ投入順位の制御上、不都合な場合がある
    • 全環境用のseedはcommonフォルダにまとめ、各環境フォルダはrequireして任意のタイミングで呼び出せるようにしている。
  • データ量が多い場合は、csvやyamlを作って、それを読み込む。
    • CSVの作成はGoogleスプレッドシートがおすすめ。Excelと違って数式を保持したまま保存してエクスポートできる。

参考サイト

注意点

  • パフォーマンスを意識しているだけあって、必要最低限の機能はExtraという形でプラグインになっている。
    • Items クエリストリングで表示件数の指定を可能とする
  • 検索時に表示件数を変えたい場合に渡すプロパティは:items
     # 5件にする場合
     @pagy, @categories = pagy(Category.includes(:parent), items: 5)