inohilog

/var/log/inohiro

db/seed.rb その2

昨年、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[ほげ ふが ぴよ]

と等価になるようです。これは結構ありがたい。