HwticFinder:ERBでActiveRecord操作文を作る

テンプレートファイル dish_ingredient_template.rhtml

  dish = Dish.find(:first, :conditions => ['name = ?', '<%= @dish.name %>'])
  ingredient_names = [
    '', '', '', '', 
    '', '', '', '', 
    '', '', '', '', 
    '', '', '', '', 
    '', '', '', '', 
  ]
  ingredient_names.each { |ingredient_name|
    ingredient = Ingredient.find(:first, :conditions => ['name = ?', ingredient_name])
    DishIngredient.create :dish_id => dish.id, :ingredient_id => ingredient.id
  }

で、これを使うデータ生成スクリプトは、

require 'rubygems'
require_gem 'activerecord'
require '../app/models/dish'
require 'erb'

ActiveRecord::Base.establish_connection(
  :adapter => 'sqlite3',
  :dbfile => '../db/HwticFinder_dev.db'
)

dishes = Dish.find :all, :order => "id"

erb = ERB.new(File.read('dish_ingredient_template.rhtml'))
outfile = File.open 'dish_ingredient_migration.txt', 'w'
outfile.puts 'DishIngredient.transaction {'
dishes.each {|@dish|
  outfile.puts "  #"
  outfile.puts "  ##{@dish.name} (p.#{@dish.page_number})" 
  outfile.puts "  #"
  outfile.puts erb.result
}
outfile.puts '}'

これを実行して出来上がったテキストファイルの、料理ごと配列部分に材料名をぽちぽち入れていく。
なんだかすごーく二度手間っぽいが。どっちみち本を見ながら入れるのだから、妙に凝ったことをするよりもキーボードから打ち込んだ方が速い。ATOKの補完機能もあるし、データも限られているし、これでいい。細かいことは気にしない!