Как использовать Faker Gem для создания поддельных названий продуктов? - PullRequest
0 голосов
/ 24 января 2019

Я прочитал несколько учебных пособий, но я все еще не уверен, как делать то, что я хочу, поэтому мне жаль, если это звучит дамп. У меня есть активная запись "Sandwitches", которая имеет следующие атрибуты: имя , цена и доступность . Поскольку я хочу создать для него поддельные данные, я не совсем уверен, как мне добиться чего-то подобного, потому что атрибут name faker может генерировать подставки для имен людей. Я хотел бы, например, генерировать имена для песочных переключателей, таких как «Club Sandwitch» или «Pesto with Feta Cheese». Есть ли способ сделать это с faker gem ? Или в принципе я мог бы использовать любой другой драгоценный камень, чтобы достигнуть этого?

Я ценю любую помощь, которую вы можете оказать!

Ответы [ 4 ]

0 голосов
/ 25 января 2019

название модели = Item.

имя столбца в дБ = (имя, цена, идентификатор категории, image_id, short_description, long_description, is_active, подготовка_time, calorie_count, food_type_id, kitchen_id, spicy_level, is_new, is_bestseller)

в /seed.rb

100.times do 
    Item.create([{
        name:Faker::Food.dish,
        price:Faker::Number.positive(5, 30),
        category_id:Faker::Number.positive(1, 10),
        image_id:Faker::Number.positive(1, 20),
        short_description:Faker::Lorem.words(rand(2..5)).join(' '),
        long_description:Faker::Lorem.words(rand(2..10)).join(' '),
        is_active:Faker::Boolean.boolean,
        preparation_time:Faker::Number.positive(10, 90),
        serves:Faker::Number.between(1, 3),
        calorie_count:Faker::Number.between(20, 500),
        meal_type_id:Faker::Number.positive(1, 4),
        cuisine_id:Faker::Number.positive(1, 10),
        spicy_level:Faker::Number.between(1, 3),
        is_new:Faker::Boolean.boolean,
        is_bestseller:Faker::Boolean.boolean
    }])
end

и затем в терминале

rake db:seed
0 голосов
/ 25 января 2019

В дополнение к ответу @ nzifnab вы также можете высушить свои спецификации и организовать свои собственные подделки (на основе кода @ nzifnab )

spec / support / faker / sandwich.rb

module Faker
  class Sandwich
    class << self
      def title
        "#{ingredients.to_sentence} on #{breads.sample(1).first}"
      end

      def breads
        ["Brioche", "Rye", "Whole Wheat"] # Add more breads here, https://en.wikipedia.org/wiki/List_of_breads can help
      end

      def ingredients
        (1..(rand(3)+1)).map{rand > 0.5 ? Faker::Food.ingredient : Faker::Food.vegetables}
      end
    end
  end
end

spec / models / sandwiches_spec.rb

describe 'Sandwiches' do
  it 'contains name' do
    # some checks...
    expect(Faker::Sandwich.title).not_to be_empty
  end
end
0 голосов
/ 25 января 2019

Вы можете посетить ссылку ниже для документации faker драгоценного камня. https://github.com/stympy/faker

Например,

5.times.do
 name = Faker::Name.first_name
 price = Faker::Name.price
end
0 голосов
/ 24 января 2019

Если вы посмотрите на жемчужину жульничества здесь: https://github.com/stympy/faker/blob/master/lib/faker/default/food.rb (обратите внимание, я не связан с разработчиками жучков) Вы можете видеть, что есть модуль питания. Итак, попробуйте это:

>> Faker::Food.dish
=> "Tiramisù"
>> Faker::Food.dish
=> "Mushroom Risotto"
>> Faker::Food.vegetables
=> "Radish"

Я также видел десертный модуль и некоторые другие, которые выглядели интересными. Поднимитесь на одно или два дерева в структуре каталогов github, чтобы увидеть другие варианты. Факер много чего делает!

Редактировать: Кроме того, ваш стол AR должен быть "Бутерброды", а не "Песочные выключатели";) Они не ведьмы с песочными способностями, это еда с хлебом; p

Другое редактирование: я не вижу опции специально для бутербродов. Но, возможно, так как это для поддельных данных, вы можете просто использовать опцию тарелки.

Последнее редактирование. Клянусь: вы могли бы «подделать» бутерброд с чем-то вроде:

breads = ["Brioche", "Rye", "Whole Wheat"] # Add more breads here, https://en.wikipedia.org/wiki/List_of_breads can help
ingredients = (1..(rand(3)+1)).map{rand > 0.5 ? Faker::Food.ingredient : Faker::Food.vegetables}
sandwich = "#{ingredients.to_sentence} on #{breads.sample(1).first}"

Который может возвращать результаты, такие как:

=> "Buckwheat Flour on Rye"
=> "Broccoli and Jicama on Whole Wheat"
=> "Peppers on Rye"
=> "Chia Seeds on Rye"
=> "Pecan Nut and Anchovies on Brioche"
=> "Arugula on Rye"
...