如何使用 faker gem 生成假食品名称?

ffb*_*ord 2 ruby ruby-on-rails faker

我已经阅读了几个教程,但我仍然不确定如何做我想做的,因此如果听起来很糟糕,我很抱歉。我有一个名为“Sandwitches”的活动记录,它具有以下属性:namepriceavailability。由于我想为它生成假数据,我不太确定如何实现这样的目标,因为名称属性faker可以生成代表人名的代表。例如,我想为三明治生成名称,例如“Club Sandwitch”或“Pesto with Feta Cheese”。有没有办法用faker gem做到这一点?或者基本上我可以使用任何其他宝石来实现这一目标吗?

我很感激你能提供的任何帮助!

vov*_*van 6

除了@nzifnab 答案之外,您还可以干燥您的规格并组织您自己的定制假货(基于@nzifnab代码)

规格/支持/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
Run Code Online (Sandbox Code Playgroud)

规格/模型/三明治_spec.rb

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


nzi*_*nab 5

如果您在这里查看 faker gem:https : //github.com/stympy/faker/blob/master/lib/faker/default/food.rb (注意,我不隶属于 faker 开发)您可以看到有一个食物模块。所以试试这个:

>> Faker::Food.dish
=> "Tiramisù"
>> Faker::Food.dish
=> "Mushroom Risotto"
>> Faker::Food.vegetables
=> "Radish"
Run Code Online (Sandbox Code Playgroud)

我还看到了一个甜点模块和其他一些看起来很有趣的模块。在 github 的目录结构中向上一两棵树查看其他选项。Faker 做了很多事情!

编辑:另外,你的 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}"
Run Code Online (Sandbox Code Playgroud)

可以返回如下结果:

=> "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"
Run Code Online (Sandbox Code Playgroud)