出来るさ、seed.exsならね。
というわけで、今回は初期データをDBに突っ込むことが出来るrake db:seed
をPhoenixFrameworkでもやってみようとおもいます。
やり方
rake db:seed
の時はdb/seeds.rb
がありましたが、Phoenixにはprev/repo/seed.exs
というファイルがあります。
seed.exs
# Script for populating the database. You can run it as:
#
# mix run priv/repo/seeds.exs
#
# Inside the script, you can read and write to any of your
# repositories directly:
#
# TestApi.Repo.insert!(%SomeModel{})
#
# We recommend using the bang functions (`insert!`, `update!`
# and so on) as they will fail if something goes wrong.
ここに書かれているように、insert処理を書いてmix run priv/repo/seeds.exs
を実行すれば初期データが突っ込まれます。
では、試しにTestApiプロジェクトにHogeモデルが存在すると仮定してinsert処理を書いてみましょう。
seed.exs
TestApi.Repo.insert!(%Hoge{
name: "HOGE"
})
これでmix run priv/repo/seeds.exs
を実行すればHogeモデルに対応したテーブルにデータが追加されます。
応用編
それでは一歩進んだやり方として、alias
を使いつつ多次元連想配列をinsertしましょう。
seed.exs
// エイリアス
alias TestApi.Hoge
alias TestApi.Repo
// 多次元連想配列
initial_hoges = [
[
{:name, "Hoge"},
{:info, "Programming Slang in Japanese."}
],
[
{:name, "Fuga"},
{:info, "Programming Slang in Japanese."}
],
[
{:name, "Foo"},
{:info, "Programming Slang in Foreign countries."}
],
[
{:name, "Bar"},
{:info, "Programming Slang in Foreign countries."}
]
]
// ループ処理
for initial_hoge <- initial_hoges do
Repo.insert!(
%Hoge{
name: initial_hoge[:name],
info: initial_hoge[:info]
}
)
end
このようにalias
を使えば簡潔に書くことが出来、多量のインサートデータがあったとしても多次元配列にすればループ処理で簡単にinsertさせることが出来ます。
まだ他にも色々な記述方法があると思いますので、色々と試してみてください。