昨年、db/seed.rb について記事を書きましたが、それの改善。
すでにrake db:seedなどでロードしているばあいに、再度ロードしちゃうと同じデータが2つずつはいっちゃうので、以下のように書き換えました。ここ最近までこれで書いてたんですが、無駄に長いというか、もっと簡単にかけるはず!(Ruby力が足りてない)
CommonBlood.destroy_all pos = 1 hCommonBlood = [] [ 'A', 'B', 'AB', 'O' ].each do |e| hCommonBlood << { :id => pos, :name => e } pos += 1 end hCommonBlood.each do |e| b = CommonBlood.find_or_create_by_id( e[:id] ) b.id = e[:id] b.name = e[:name] b.save! end
今回また改善しました。
%w[A B AB O].each_with_index do |e,id| CommonBlood.new do |blood| blood.id = id + 1 blood.name = e blood.save end end
今回知ったのが「%記法」。これを使うと、
[ 'ほげ', 'ふが', 'ぴよ' ]
が、
%w[ほげ ふが ぴよ]
と等価になるようです。これは結構ありがたい。