同じにやっても動かない

書いてある通りやっているのに動かないのです

model.create / model.save は成功するのに model.all.count = 0になる on Rspec + FactoryGirl

SQLもWebアプリも難しいですね。
しょうもない事でハマってしまいました。


model単体のテストをRspec + FactoryGirlで書いていたのですが、model.create / model.save は成功する(trueが返ってきてレコードがちゃんとできる)のに、model.all.countはいつも0で、DBには保存されていないように見えるという不思議な現象に悩んでおりました。


で、原因はmodelの定義で設定していたdefault_scopeでした。

関連している他のモデルの属性を使ってソートするdefault_scopeを設定してたのですが、今回のテストには関連先まで定義していなかったため、どんなにレコードを登録しても検索条件には引っかからずmodel.allは常に0という事が起こっていたのです orz。


で、モデル単体のテストときは全てのスコープを無効にするようにしたら、ちゃんと登録済レコードが見えるようになりました。

こんな感じ。

it {
  Model.unscopded {
    テストコード
  }
}


でも、これだとまた忘れた頃に同じ事ではまりそうなので、結局default_scopeで設定するのをやめて、名前付きスコープで定義するようにしましたです。


ではでは。