【问题标题】:How make faker gem create english sentences and paragraphsfaker gem 如何创建英文句子和段落
【发布时间】:2021-08-20 19:46:41
【问题描述】:

我在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 

生成的输出中有不必要的连字符,这也发生在生成的段落中。如下图。

--- - 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 创建看起来干净的英语语句和段落。

谢谢。

【问题讨论】:

    标签: ruby-on-rails faker


    【解决方案1】:

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

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

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

    更新

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

    因此,对于您的标题,您最好使用sentence 而不是words,然后将最后一个. 切掉

    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

    Positional keywords deprecated in favour of keyword arguments in Faker 2.0 in 2019

    Faker::Lorem reference

    【讨论】:

    • 谢谢。我的大部分期望都被满足了。在仔细观察faker 之后,我想我无法从Faker::Lorem 得到英文单词。非常感谢。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 这很有趣 ;) 还有其他类似的方法吗?我在网上找不到 Faker 的文档。
    • @Myoung Hoon Kim:我添加了一个链接,指向我找到此信息的页面。
    • 要生成一个段落,试试这个(在 Rails 控制台中):a = "",然后是50.times do a = a + Faker::ChuckNorris.fact end。玩得开心:D
    猜你喜欢
    • 1970-01-01
    • 2012-07-10
    • 2013-05-28
    • 1970-01-01
    • 2011-01-10
    • 2014-06-01
    • 2013-08-13
    • 1970-01-01
    • 2012-04-26
    相关资源
    最近更新 更多