以下のような感じです。
DATA.each_line do |l| puts l end __END__ aaa bbb ccc
__END__以下がデータを記述したファイル扱いになって、DATAで取り出せます。
これをrailsのmigrationでテーブルをcreateしたの時の初期データセットに利用してみようと思ったわけです。
こんな感じです。
class CreateHoges < ActiveRecord::Migration
def self.up
create_table :hoges do |t|
t.column :c1 ,:string
t.column :c2 ,:string
t.column :c3 ,:integer
end
DATA.each_line do |line|
d = line.split(",")
h = Hoge.new
h.c1 = d[0]
h.c2 = d[1]
h.c3 = d[2]
h.save!
end
end
def self.down
drop_table :hoges
end
end
__END__
aaa,bbbb,111
ccc,dddd,222
でも、これを実行しようとしたらDATAなど知らないよ!とエラーが出てしまいました。
明確な理由は、よくわからなかったのですがDATAと__END__を利用するのは一つのファイルで完結するようなものに限ったほうがよさそうです。
以下が参考になりました。
http://d.hatena.ne.jp/yarb/20120927/p1
そして調べていたら、以下のような感じにすればOKでした。
class CreateHoges < ActiveRecord::Migration
def self.up
create_table :hoges do |t|
t.column :c1 ,:string
t.column :c2 ,:string
t.column :c3 ,:integer
end
data = File.read(__FILE__).split('__END__').last
data.each_line do |line|
line.chomp!
next if line.size == 0
d = line.split(",")
h = Hoge.new
h.c1 = d[0]
h.c2 = d[1]
h.c3 = d[2]
h.save!
end
end
def self.down
drop_table :hoges
end
end
__END__
aaa,bbbb,111
ccc,dddd,222
以下が参考になりました。
http://matthewtodd.org/2008/04/22/rails-tip-2-faking-data-in-tests.html
そもそもrailsでテーブルを追加した時の初期データセットってどうするのが普通なのかしらん?
0 件のコメント:
コメントを投稿