yochiyochirb/kajaeru

seedファイルを修正したい

Closed this issue · 4 comments

seedを2回動かすとid 1がいなくなってしまうので修正したい

delete_allしているけど、個人的にはtruncateしたい

過去にid決め打ちで書いてあったような記述が見受けられるが、どういった経緯で消えたのかがわからないので教えていただきたいです

今までは確か、データを入れ替えたくなったりしたら一度 DB を DROP して作りなおすという力技で回避していたんですが、それではあまりよくないですね。(_ _)

delete_allしているけど、個人的にはtruncateしたい

つまり id が auto increment になっているところをリセットして作りなおすように変えたいという意図で間違いないでしょうか?

過去にid決め打ちで書いてあったような記述が見受けられるが、どういった経緯で消えたのかがわからないので教えていただきたいです

すみません、こちらはどの行のことをさしていますか? URL いただけるとありがたいです(_ _)

横からですけど、seeds.rb の TODO コメントにもある通り、今の状態というのが、いろいろいい方法がないかやってみようとしている途中のスナップショットに見えるし、かつ現在の seeds.rb で期待通りに動かない原因もはっきりしているので、あまり経緯とかを気にせず issue 化するなりして PR 出して実装で提案するような形がいいのかなーという気がします。時間も経ってるから経緯を思い出すのも大変だろうし。って経緯を知らない人が言うのもどうかと思いますが…

一応、seeds.rb とかを見て直すべきかなと思う点を整理すると、

  1. Member.delete_all しているがプライマリキー (id) がインクリメントされてしまう
    1. の結果 sessions#callback で期待するテストデータが存在しない
  2. 最初に wiki の開発環境構築の初期データ投入バッチを流してしまうと初回の seed 投入時にも期待するテストデータが存在しない
  3. roles (Candidate, Voter) は delete_all もされず投入された seed がずっと残る

なので membersroles のテーブルを truncate してやれば大体解決しそうな話です。たぶんがくさんもそういう修正を想定していての話ですよね。

一応、一方でそれをどうやってやるかという観点もあるかと思ってて (素直に truncate するならたぶん SQL を直接発行するような形にするしかないですよね)、

  • 素直に TRUNCATE 文を発行する
  • TRUNCATE はせずに delete_all した上でプライマリキーだけ振り直す (これでいけそう)
  • Database Cleaner, seed-fu, FactoryGirl あたりの Gem を利用する
  • Fixtures を使う

Rails っぽいのは Gem 使うか Fixtures でしょうけど、まーその辺は別の話なので、まずは PR 出してみてそれで今の問題が改善するなら取り込むのでよいのでは、というのが意見です。

なので members と roles のテーブルを truncate してやれば大体解決しそうな話です。たぶんがくさんもそういう修正を想定していての話ですよね。

そういう修正を想定しておりました

夜修正してPR出してみます

@yucao24hours

すみません、こちらはどの行のことをさしていますか? URL いただけるとありがたいです(_ _)

uidと見間違いだったようです
すみません 😥