6

I use following code in lib/tasks/sample_data.rake file to generate fake data to fill development database.

namespace :db do
  desc "Fill database with sample data"
  task populate: :environment do
    Faker::Config.locale = :en
    99.times do |n|
      title  = Faker::Lorem.words(2..10)
      body  = Faker::Lorem.paragraphs(2..8)
      Topic.create!(title: title,
                   body: body)
    end
  end
end

The problem is the generated text for title looks like this in index page

--- - doloribus - numquam - placeat - delectus - et - vero
--- - nostrum - numquam - laudantium - voluptas - est - laborum
--- - perferendis - nemo - facilis - quis - eos - quia - sint 

There are unnecessary hiphens in the generated output, This also happens in the generated paragraphs. As shown below.

--- - Fuga explicabo et ea. Excepturi earum ut consequatur minima iure.  
Molestias id tempora alias quisquam animi earum. Eius libero minima ut.  
Repudiandae eum commodi. - Iure aliquam at maxime. Rerum ea non corrupti  
asperiores est. Debitis suscipit nihil quod ut eaque sint repellat.   
quae doloremque. - Voluptatem facere deleniti nisi libero. Molestiae 
magni dolores repudiandae in corporis. Ut enim illum optio et architecto.

How do I prevent this behavior of adding unnecessary hyphens, and create clean looking English statements and paragraphs with faker gem.

Thanks.

4

2 回答 2

15

我不认为 Faker 方法接受范围作为参数。在 doc 中,它只接受数字。因此,我什至无法通过复制您的代码在控制台中重现您的问题。

也许您想生成随机长度的单词或段落?您可以使用rand它来生成它。像这样:

title = Faker::Lorem.words(number: rand(2..10))
body  = Faker::Lorem.paragraphs(sentence_count: rand(2..8))

更新

Faker 将创建HASH而不是纯字符串。

所以,对于你的标题,你最好使用sentence而不是words然后 chomp 最后一个.

title = Faker::Lorem.sentence(word_count: rand(2..10)).chomp('.')
# or
title = Faker::Lorem.words(number: rand(2..10)).join(' ')

对于正文,加入段落\n或任何你喜欢的

body  = Faker::Lorem.paragraphs(sentence_count: rand(2..8)).join('\n')

更新 2

在 2019 年的 Faker 2.0 中,位置关键字被弃用,取而代之的是关键字参数

Faker::Lorem 参考

于 2013-04-21T13:35:19.667 回答
6

这解决了您关于获取随机英语单词的第二个问题。

有一些 Faker 类确实会生成英语中的随机单词。

Faker::Commerce.product_name会产生一些幽默的结果,例如:
  • “很棒的混凝土椅子”
  • “神奇的塑料帽子”
  • 《华丽的钢裤》
Faker::Company.catch_phrase还会生成随机的英语流行语,例如:
  • “多边中间集团”
  • 《高级面向对象的图形界面》
  • “可编程关键任务分析仪”
我发现使用这些给测试带来了一点轻松。

这是来自http://rubydoc.info/github/stympy/faker/master/Faker/

于 2014-02-06T16:31:36.520 回答