seeds.rbをスッキリさせる3つのポイント
インターファームで開発を始めて約2週間が過ぎ、
だんだん会社にもRailsにも慣れてきました。
Railsには複数人で開発する上で、
便利な機能が数多く用意されており、seedもそのひとつです。
seedとは、データを挿入するRubyのスクリプトのことで
これを使うことによって、データを挿入する際に
コマンドひとつで実行することができるようになります。
複数のデータを挿入するため、ファイルが長くなりがちなseeds.rbですが、
今日はそれをスッキリさせるポイントを3つご紹介したいと思います。
1. 配列にして一気にデータを挿入する
こちらが僕が最初に書いていたseeds.rbの一部です。
user = Lang.create(:lang => "日本語") user = Lang.create(:lang => "英語") user = Lang.create(:lang => "フランス語")
何度もcreateをしていて、かなり見づらいですね。
配列にして一気にデータを渡すと次のようになります。
user = Lang.create([ {:lang => "日本語"}, {:lang => "英語"}, {:lang => "フランス語"} ])
これだけでも割と見やすくなった気がします。
可能ならば、each文などのループを使って実行するのも手だと思います。
2. Truncateしてデータを初期化する
これはあまり見やすさとは関係ないですが、やっておくと便利です。
auto_incrementの自動採番も同時にリセットしてデータを消去してくれます。
これを知らなかったために、いちいちDBに入って
データを消して、自動採番をリセットしていました。笑
Lang.connection.execute("TRUNCATE TABLE langs;")
3. seedファイルを複数に分ける
これが1番実践的な方法かつ需要があると思います。
開発が進むにつれて、データが多くなってファイルが長くなってしまうので、
テーブルごとにseedファイルを分けるとよいでしょう。
まずは前準備としてdb/seeds/というディレクトリを作り、
そのディレクトリの中にテーブルごとのseedファイルを作成します。
名前はなんでもいいので、{table名}.rbにしておくといいでしょう。
最後に以下のようにdb/seeds.rbを編集すればOKです。
Dir.glob(File.join(Rails.root, 'db', 'seeds', '*.rb')) do |file| load(file) end
ソースを見ればわかるとおり、
seeds.rbでディレクトリに分割したファイルを読み込んでいるだけです。
これらのポイントを行えば、かなり見やすいseedファイルになるはずです。
やはり個人での開発よりもチームで開発した方が
いろんな気付きがあるなと感じた1日でした。
以上インターンの@ij_spitzでしたー