2
votes

Comment utiliser de faux gemmes pour générer de faux noms d'aliments?

J'ai lu plusieurs tutoriels, mais je ne sais toujours pas comment faire ce que je veux, donc je suis désolé si ça sonne. J'ai un enregistrement actif appelé "Sandwitches", qui a pour attributs: nom , prix et disponibilité . Comme je souhaite générer de fausses données pour cela, je ne sais pas trop comment je peux réaliser quelque chose comme ça, car l'attribut name faker peut générer des noms de personnes. Je voudrais par exemple générer des noms pour les sandwitches, comme "Club Sandwitch" ou "Pesto with Feta Cheese". Est-il possible de faire cela avec faker gem ? Ou pourrais-je utiliser un autre bijou pour y parvenir?

J'apprécie toute aide que vous pouvez fournir!


0 commentaires

4 Réponses :


5
votes

Si vous jetez un œil à la gemme faker ici: https://github.com/stympy/faker/blob/master/lib/faker/default/food.rb (note, je ne suis pas affilié au développement faker) Vous pouvez voir qu'il y a un module alimentaire . Alors essayez ceci:

=> "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"

J'ai aussi vu un module dessert et quelques autres qui semblaient intéressants. Montez une ou deux arborescences dans la structure de répertoires de github pour voir d'autres options. Faker fait beaucoup de choses!

Edit: De plus, votre table AR devrait être "Sandwiches", pas "Sandwitches";) Ce ne sont pas des sorcières avec des pouvoirs de sable, ce sont de la nourriture avec du pain; p

Autre modification: je ne vois pas d'option spécifiquement pour les sandwichs. Mais peut-être que comme il s'agit de fausses données, vous pouvez simplement utiliser l'option de plat.

Dernière modification Je jure: vous pouvez "faux" un sandwich avec quelque chose comme:

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}"


0 commentaires

6
votes

En plus de la réponse @nzifnab , vous pouvez également sécher vos spécifications et organiser vos propres contrefaçons personnalisées (basées sur @nzifnab )

spec / support / faker / sandwich.rb

describe 'Sandwiches' do
  it 'contains name' do
    # some checks...
    expect(Faker::Sandwich.title).not_to be_empty
  end
end

spec/models/sandwiches_spec.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


1 commentaires

Je pense que c'est expect (...). Not_to , pas to_not ? À moins que les deux ne fonctionnent? J'ai toujours utilisé not_to dans rspec.



0
votes

Vous pouvez visiter le lien ci-dessous pour la documentation de la gemme faker https://github.com/stympy/faker

Par exemple,

< pré> XXX


0 commentaires

1
votes

model name = Item.

db column name = (name, price, category_id, image_id, short_description, long_description, is_active, preparation_time, calorie_count, meal_type_id, cuisine_id, spicy_level, is_new, is_bestseller)

dans /seed.rb

rake db:seed

puis dans le terminal

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


0 commentaires