はじめに
railsで開発する際、あらかじめ用意しておいたデータをデータベースに挿入したい場面が多々あると思います。今回はその流れをまとめていきます。
Bookモデルを作成している前提で話を進めていきます。
(rails g model book title:string
)
次の流れで進めていきます。
- seeds.rbファイルにアルゴリズムを作成する
- csvファイルを作成する
- コマンドを実行し、データをデータベースに挿入する
#流れ
1. seeds.rbファイルにアルゴリズムを作成する
require "csv"
books_csv = CSV.readlines("db/books.csv")
books_csv.shift
books_csv.each do |row|
Book.create(title: row[1])
end
1行目では、Rubyで用意されているcsvを扱うための、csvライブラリを呼び出しています。
requrireを利用すると外部ライブラリを利用することが可能になります。
次に、readlines
メソッドを使って、、ファイル内容を全て読み込んで、その各行を要素として持つ配列を返します。
そして、shift
メソッドにより、配列の先頭の要素を取り出します。破壊的なメソッドであるため、メソッド適用後は、先頭要素が除外された配列となっています。
2. csvファイルを作成する
ここで、csvファイルの中身を作成します。
id,"title","created_at","updated_at"
1,"3ステップでしっかり学ぶRuby入門","0000-00-00 00:00:00","0000-00-00 00:00:00"
2,"プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで","0000-00-00 00:00:00","0000-00-00 00:00:00"
3,"プログラミング言語Ruby","0000-00-00 00:00:00","0000-00-00 00:00:00"
4,"初めてのRuby","0000-00-00 00:00:00","0000-00-00 00:00:00"
5,"メタプログラミングRuby","0000-00-00 00:00:00","0000-00-00 00:00:00"
6,"たのしいRuby","0000-00-00 00:00:00","0000-00-00 00:00:00"
7,"Effective Ruby","0000-00-00 00:00:00","0000-00-00 00:00:00"
8,"たった1日で基本が身につくRuby on Rails超入門","0000-00-00 00:00:00","0000-00-00 00:00:00"
9,"基礎 Ruby on Rails","0000-00-00 00:00:00","0000-00-00 00:00:00"
10,"オブジェクト指向設計実践ガイド - Rubyでわかる 進化し続ける柔軟なアプリケーションの育て方","0000-00-00 00:00:00","0000-00-00 00:00:00"
見ての通り、一行目はフィールドの項目ですので必要ないですね。
eachメソッドからの流れはよく目にする文法ですので、ここでは割愛します。
3. コマンドを実行し、データをデータベースに挿入する
rails db:seed
これでデータベースにデータをインサートすることができました。
補足
ついでに、csvファイルの各行を要素として収めた配列の中身を確認してみます。
console上でruby
コマンドを実行することにより確認することができます。
そこで、seeds.rbファイルを下記のように編集します。
require "csv"
books_csv = CSV.readlines("books.csv")
books_csv.shift
books_csv.each do |row|
# Book.create(title: row[1])
end
p books_csv
実行結果は次のようになります。
$ ruby seeds.rb
[["1", "3ステップでしっかり学ぶRuby入門", "0000-00-00 00:00:00", "0000-00-00 00:00:00"], ["2", "プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで", "0000-00-00 00:00:00", "0000-00-00 00:00:00"], ["3", "プログラミング言語Ruby", "0000-00-00 00:00:00", "0000-00-00 00:00:00"], ["4", "初めてのRuby", "0000-00-00 00:00:00", "0000-00-00 00:00:00"], ["5", "メタプログラミングRuby", "0000-00-00 00:00:00", "0000-00-00 00:00:00"], ["6", "たのしいRuby", "0000-00-00 00:00:00", "0000-00-00 00:00:00"], ["7", "Effective Ruby", "0000-00-00 00:00:00", "0000-00-00 00:00:00"], ["8", "たった1日で基本が身につくRuby on Rails超入門", "0000-00-00 00:00:00", "0000-00-00 00:00:00"], ["9", "基礎 Ruby on Rails", "0000-00-00 00:00:00", "0000-00-00 00:00:00"], ["10", "オブジェクト指向設計実践ガイド - Rubyでわかる 進化し続ける柔軟なアプリケーションの育て方", "0000-00-00 00:00:00", "0000-00-00 00:00:00"]]
非常に見にくい結果となっているので、pp
ライブラリをrequire
で取り込みます。
次のように編集します。
require "csv"
require "pp"
books_csv = CSV.readlines("books.csv")
books_csv.shift
books_csv.each do |row|
# Book.create(title: row[1])
end
pp books_csv
再度rubyコマンドを実行します。
$ ruby seeds.rb
[["1", "3ステップでしっかり学ぶRuby入門", "0000-00-00 00:00:00", "0000-00-00 00:00:00"],
["2",
"プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで",
"0000-00-00 00:00:00",
"0000-00-00 00:00:00"],
["3", "プログラミング言語Ruby", "0000-00-00 00:00:00", "0000-00-00 00:00:00"],
["4", "初めてのRuby", "0000-00-00 00:00:00", "0000-00-00 00:00:00"],
["5", "メタプログラミングRuby", "0000-00-00 00:00:00", "0000-00-00 00:00:00"],
["6", "たのしいRuby", "0000-00-00 00:00:00", "0000-00-00 00:00:00"],
["7", "Effective Ruby", "0000-00-00 00:00:00", "0000-00-00 00:00:00"],
["8",
"たった1日で基本が身につくRuby on Rails超入門",
"0000-00-00 00:00:00",
"0000-00-00 00:00:00"],
["9", "基礎 Ruby on Rails", "0000-00-00 00:00:00", "0000-00-00 00:00:00"],
["10",
"オブジェクト指向設計実践ガイド - Rubyでわかる 進化し続ける柔軟なアプリケーションの育て方",
"0000-00-00 00:00:00",
"0000-00-00 00:00:00"]]
とてもわかりやすくなりました。
pp
ライブラリって便利ですね。
おわりに
Railsを構成しているファイルの大半は.rb
ファイルで構成されています。
つまりは、rubyで書けるファイルが大半であるとも言えますね。
この事実を今一度思い出して、適切にアルゴリズムを組んで、より幅広く処理ができるように勉強していきたいと思います。
少しでも役に立ったという方は、いいね、お願いします(^^)