Hello, 我是 Weber,一位工程師,斜槓鼓手與行銷顧問。
Rails 開發,每日一套件第 9 天,讓我們一起認識 Rails 開發好用的 30 個套件,建立出自己的常用套件庫吧!
開發專案時,為了測試及Demo,常常需要創造假的資料來寫入。好比註冊會員,會需要 email、姓名、電話、地址、護照ID等,或是商品資訊、標題、內容文字、類別等等。在測試時的種子資料及模擬上線後的環境,一定會需要做大量的資料寫入。
你當然可以一個一個創,甚至你要卯起來去申請大量 email 帳戶,也不是不行。那名字呢?地址呢?品名呢?類別呢?就算你都掰的出來好了,那你要怎麼紀錄呢?或者如果需要 10000 筆資料呢?請工讀生建嗎?
身為開發者的各位,應該心中早就浮現 ”用程式跑呀“ 等想法,看是要 loop、for、while、.times,都好。
不過如同標題陳述的,把時間花在更有意義的地方吧!
除非是特殊的資料欄位,有特殊的邏輯規則加解密,可能還是要自己寫之外。
其他的一般欄位,就讓套件費心吧!
我個人很常身兼多職,有幾個 Work Smarter 的中心思想。
不把時間花在高重複性、無意義的雜務上,這種事情能不要親自做,我一定不親自做,絕對是第一步的第一步!
(有興趣討論 Work Smarter 這檔事,可能我部落格再寫?XD)
Faker 嚴格說起來是一個 library。文本開宗明義第一句話:
Faker is a port of Perl's Data::Faker library. It's a library for generating fake data such as names, addresses, and phone numbers.
所以我的理解,其實只是安裝一個 gem 然後抓取 library 中的資料(有錯請大力鞭我)
老招先上:
bundle add faker
通常會放在 group development 底下,看情況自己調整吧!
然後在你要使用的檔案中加入:
require 'faker'
接著,用法如下:
Faker::Name.name #=> "Christophe Bartell"
Faker::Address.full_address #=> "5479 William Way, East Sonnyhaven, LA 63637"
Faker::Markdown.emphasis #=> "Quo qui aperiam. Amet corrupti distinctio. Sit quia *dolor.*"
Faker::TvShows::RuPaul.queen #=> "Violet Chachki"
Faker::Alphanumeric.alpha(number: 10) #=> "zlvubkrwga"
Faker::ProgrammingLanguage.name #=> "Ruby"
有幾個常用方法可以用 .unique
, .random
, .new
好,結束!
是不是簡單又好用,絕對值得蒐藏!
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
什麼?還要細講嗎?
好吧,其他真的也沒什麼好說的,我當時讀文件時,花最多時間的都是找有哪些有趣的 library 內容而已。
附上一段我測試用的 seed 範例供參考:
fakewords = [
"萬物於我皆為春秋,而吾將與時俱舞。",
"塵世煙雲,皆是虛幻之事,莫過於心靈之清明。",
"大道之行也,天下為公,吾其獨樂樂乎?",
"人生如夢,一切皆虛。悟己者智,悟道者明。",
"天地萬物,與我何干?內觀自心,得天地之間。",
"虛無即是真實,真實亦可化為虛無。",
"逍遙於自然之間,心隨物動,物隨心生。",
"欲去一切,方得無所不在。",
"萬物皆妄,吾亦妄言之。妄言既妄,妄言誰妄?",
"安得為紅顏,不負春風?吾有心而忘形。"
]
500.times do |i|
fakername = Faker::Name.unique.name
fakeremail = Faker::Internet.unique.email
fakerpassword = '12345678'
fakerphone = Faker::PhoneNumber.phone_number
fakerlocation = Faker::Address.state
fakercontent = fakewords.sample
user = User.create!(
name: fakername,
email: fakeremail,
password: fakerpassword,
confirmed_at: Time.now
)
demo_profile = user.create_profile(
phone: fakerphone,
location: fakerlocation,
content: fakercontent
)
puts "已建立使用者 #{i + 1}: #{fakername} - #{fakeremail}"
end
補充說明一下 fakewords 那段,是因為我要生成中文的內文,又不想生一些無意義的 giblish,就用了莊子語錄。
然後最後 puts 是你塞 seed 的時候,你就知道要幹嘛了!
以上!我們明天見吧!