考えすぎてしまう人のブログ

世の中の色んなことをいつも考えすぎてしまう僕の脳内を垂れ流します

Railsで初期データを設定するSeed-fuとSorceryの組み合わせは気を付けたほうが良い

管理者データを用意したり初期データを設定したり

そんなときに便利なのがseed-fuというgemです

RailsデフォルトのSeed(rake sb:seed)を使うとコマンドを実行するたびにデータが増えてしまうのですがSeed-fuは賢いので同じデータを複数作ったりはしません

上手く動かない

ということでSeed-fuを使うのですが こんな感じで初期ユーザーを登録したとします

# /db/fixtures/user.rb
User.seed do |s|
  s.id    = 1
  s.email = "test@example.com"
  s.name  = "hiroshi"
  s.password = "password"
end

Sorceryでは保存時に自動的にf.passwordに突っ込まれたデータを暗号化してsaltなどを設定してf.password_encryptに保存してくれます

しかし、seed-fuを使ってしまうとこのパスワード周りの機能が動かないため上手くパスワードが保存されません

解決方法

おとなしくデフォルトのseedを使おう

あんまりかっこよくないですが

# /db/seeds.rb
u = User.where(id: 1).first
if u.blank?
  u.id    = 1
  u.email = "test@example.com"
  u.name  = "hiroshi"
  u.password = "password"
  u.save
end

こんな感じで1件1件存在を確認する形になります たぶん探せばseed-fu側で何かしら解決方法を用意していると思いますがそんなに大がかりな初期設定は必要ないのでとりあえずこれで対応しています

もっとクールなやり方をしっている人がいたらぜひ教えてください :)