今回達成すること
モデル開発を行う下準備として、Railsのseedデータ周りのセッティングを行います。
この設定により、本場環境と開発環境で流し込むseedデータを簡単に切り替えることができます。
最終的なディレクトリ構成
最終的にディレクトリは以下のようになります。
Railsプロジェクト名
L db
L migrate
L seeds << ここ以下、今回作成するディレクトリ
L csv_files
L development
L production
各ディレクトリの作成
まず、各ディレクトリを作成します。
Atomエディタの場合、「shift」 + 「a」キーボードでディレクトリの新規作成ができます。
seedsディレクトリの作成
Railsプロジェクトルートディレクトリの直下の「db」ディレクトリに、「seeds」ディレクトリを作成します。
seeds.rbと同じ階層になります。
開発環境用のseedファイルを格納するディレクトリの作成
先ほど作成した「seeds」ディレクトリ内に「development」ディレクトリを作成します。
本番環境用のseedファイルを格納するディレクトリの作成
先ほど作成した「seeds」ディレクトリ内に「production」ディレクトリを作成します。
CSVファイルを格納するディレクトリの作成
先ほど作成した「seeds」ディレクトリ内に「csv_files」ディレクトリを作成します。
seeds.rbを編集する
Railsが読み込むseedファイルを、環境ごとにディレクトリ単位で切り替えを行う設定をしていきます。
「db」ディレクトリ直下にあるseeds.rbを以下の様に編集します。
seeds.rb
table_names = %w(
)
table_names.each do |table_name|
environment = (Rails.env == "test") ? "development" : Rails.env
path = Rails.root.join("db/seeds", environment, table_name + ".rb")
if File.exist?(path)
puts "#{table_name}..."
require path
end
end
コードのポイント
-
table_names
%w
は、空白で区切った文字列を配列に変換するrubyのコードです。作成した配列を
each
でループしています。 -
Rails.env
現在の環境を読み取り
test
、development
、production
の3つの文字列のいずれかを返します。 -
path
Rails.env
の文字列とtable_name
の文字列を結合し、ファイルpathとして渡します。上記の場合、
environment
という変数の中に、Rails.env
の値が格納されています。
まとめ
このseeds.rbのコードにより
- テスト環境、開発環境の時には、developmentディレクトリ内のファイルが、
- 本番環境の時には、productionディレクトリ内のファイルが
読み込まれるようになります。
これでディレクトリ単位でseedデータを切り替えることができるようになりました。
gitにpushしておきましょう。
$ git add -A
$ git commit -m "seed_data_settings"
$ git push
次回予告
やっとモデル開発の準備が整いました。
次回はuserモデルの開発をしていきます。
参考
↓この本まじで良きです。