Skip to content

撰寫 seed.rb 檔(自動產生資料庫數據)及rake db:reset

yungyuan edited this page Jul 29, 2016 · 1 revision

我們在開發專案的時候,常會需要弄些假資料來填充版面, 或是說當資料庫炸掉的時候,會很想一股腦把資料庫整個 reset 掉, 並希望 reset 完還能把一些資料放進去,例如在第一週的作業裡,可以透過撰寫seed.rb來自動產生user, jobs, wage_upper_bound, wage_lower_bound,不用一個個手動輸入

我們來做一個 seed 檔,需求:

  1. 建立一個 user 帳號 => [email protected] , 密碼 12345678 , 並且是admin
  2. 並用此帳號建立 10 個 public jobs, 亂數產生薪資上限及薪資下限
  3. 用此帳號再建立 10 個 hidden jobs, 亂數產生薪資上限及薪資下限

打開db/seeds.rb
輸入

puts "這個種子檔會自動建立一個admin帳號, 並且創建 10 個 public jobs, 以及10個hidden jobs"

create_account = User.create([email: '[email protected]', password: '12345678', password_confirmation: '12345678', is_admin: 'true'])
puts "Admin account created."

create_jos = for i in 1..10 do
  Job.create!([title: "Job no.#{i}", description: "這是用種子建立的第 #{i} 個Public工作", wage_upper_bound: rand(50..99)*100, wage_lower_bound: rand(10..49)*100, is_hidden: "false"])
end
puts "10 Public jobs created."

create_jos = for i in 1..10 do
  Job.create!([title: "Job no.#{i+10}", description: "這是用種子建立的第 #{i+10} 個Hidden工作", wage_upper_bound: rand(50..99)*100, wage_lower_bound: rand(10..49)*100,is_hidden: "true"])
end
puts "10 Hidden jobs created."

執行 rake db:reset

此時你的資料庫內就有自動生成的數據了。

rake db:reset 是內建的 task ,會執行一整套流程 包含 db:drop( 資料庫移除 ) => db:create( 資料庫建立 ) => db:schema:load ( 資料庫欄位建立 ) => db:seed ( 執行資料庫種子 )