如何让faker gem创建英语句子和段落

时间:2013-04-21 13:18:51

标签: ruby-on-rails faker

我在lib/tasks/sample_data.rake文件中使用以下代码生成虚假数据以填充开发数据库。

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

问题是标题的生成文本在index页面

中看起来像这样
--- - doloribus - numquam - placeat - delectus - et - vero
--- - nostrum - numquam - laudantium - voluptas - est - laborum
--- - perferendis - nemo - facilis - quis - eos - quia - sint 

生成的输出中有不必要的hipns,这也发生在生成的段落中。如下图所示。

--- - 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.

如何防止添加不必要的连字符的这种行为,并使用faker gem创建干净的英语语句和段落。

感谢。

2 个答案:

答案 0 :(得分:9)

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

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

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

更新

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

因此,对于您的标题,您最好使用sentence代替words,然后选择最后.

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

对于正文,请使用\n或任何您喜欢的内容加入段落

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

答案 1 :(得分:5)

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

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

{{1}将产生一些幽默的结果,例如:
  • “令人敬畏的混凝土椅”
  • “神奇的塑料帽”
  • “华丽的钢制裤子”
Faker::Commerce.product_name还会生成随机的英文流行语,如:
  • “多边中间集合”
  • “高级面向对象的图形界面”
  • “可编程任务关键型分析仪“
我发现使用它们会给测试带来一些轻率。

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