Как заставить faker gem создавать английские предложения и абзацы

Я использую следующий код в файле 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.

Спасибо.


person Sathish Manohar    schedule 21.04.2013    source источник


Ответы (2)


Я не думаю, что методы Faker принимают диапазон в качестве аргументов. В документе он принимает только числа. Таким образом, я даже не могу воспроизвести вашу проблему в консоли, скопировав ваш код.

Может быть, вы хотите генерировать слова или абзацы произвольной длины? Вы можете использовать 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')
person Billy Chan    schedule 21.04.2013
comment
Спасибо. Большинство моих ожиданий сбылись. Присмотревшись к фейкеру, я подумал, что не могу получить английские слова в выводе Faker::Lorem. Большое спасибо. - person Sathish Manohar; 21.04.2013

This addresses your secondary question about getting random English words.

Есть несколько классов Faker, которые генерируют случайные слова на английском языке.

Faker::Commerce.product_name will generate some humorous results such as:
  • «Удивительный бетонный стул»
  • «Фантастическая пластиковая шляпа»
  • «Великолепные стальные штаны»
Faker::Company.catch_phrase also generates random English buzzwords like:
  • «Многосторонний промежуточный конгломерат»
  • «Расширенный объектно-ориентированный графический интерфейс»
  • «Программируемый анализатор для критически важных задач»
I find using these brings a bit of levity to testing.

Это из http://rubydoc.info/github/stympy/faker/master/Faker. /.

person Dan    schedule 06.02.2014
comment
Забавно ;) Какие-нибудь другие методы, подобные этому? Я не могу найти документацию Faker в Интернете. - person MKatleast3; 08.07.2014
comment
@Myoung Hoon Kim: я добавил ссылку на страницу, где нашел эту информацию. - person Dan; 09.07.2014
comment
Для создания абзаца попробуйте это (в консоли rails): a = "", затем 50.times do a = a + Faker::ChuckNorris.fact end. Веселись :D - person ARK; 26.12.2019