Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby gem工厂机器人:_Ruby On Rails_Ruby_Rubygems_Factory Bot - Fatal编程技术网

Ruby on rails Ruby gem工厂机器人:

Ruby on rails Ruby gem工厂机器人:,ruby-on-rails,ruby,rubygems,factory-bot,Ruby On Rails,Ruby,Rubygems,Factory Bot,我的目标是创建具有相同值的几个字段的工厂, 例如,我希望该名称和全名相等 FactoryBot.define do factory :brand do n = Faker::Company.name name { n } full_name { n } end end 上述方法不起作用,因为n只获得一次值 那么,如何评估某个块以与几个动态字段共享其数据呢 另一种情况:我有品牌的YML文件,方法get\u random\u brand返回带有品牌字段的

我的目标是创建具有相同值的几个字段的工厂, 例如,我希望该名称和全名相等

FactoryBot.define do
  factory :brand do
    n = Faker::Company.name
    name      { n }
    full_name { n }
  end
end
上述方法不起作用,因为n只获得一次值

那么,如何评估某个块以与几个动态字段共享其数据呢


另一种情况:我有品牌的YML文件,方法get\u random\u brand返回带有品牌字段的哈希:

FactoryBot.define do
  factory :brand do
    b = get_random_brand
    name      { b['name'] }
    full_name { b['full_nam'] }
  end
end
我理解工厂在阅读工厂定义时会做什么

如何评估获取\u random\u brand每个创建的工厂仅一个?

在FactoryBot中实际上非常简单,因为您只需调用块中其他属性的方法:

FactoryBot.define do
  factory :brand do
    name      { Faker::Company.name }
    full_name { name }
  end
end
例如,您可以执行以下操作:

FactoryBot.define do
  factory :user do
    name  { Faker::Name.name }
    email { name.downcase.tr(' ', '.') + "@example.com" }
  end
end
上述方法不起作用,因为n只获得一次值

那是因为
工厂。。。读取出厂定义时,将计算do
块。并非每次都使用工厂。

在FactoryBot中实际上非常简单,因为您只需调用块中其他属性的方法:

FactoryBot.define do
  factory :brand do
    name      { Faker::Company.name }
    full_name { name }
  end
end
例如,您可以执行以下操作:

FactoryBot.define do
  factory :user do
    name  { Faker::Name.name }
    email { name.downcase.tr(' ', '.') + "@example.com" }
  end
end
上述方法不起作用,因为n只获得一次值


那是因为
工厂。。。读取出厂定义时,将计算do
块。并非每次都使用工厂。

尝试在FactoryBot范围之外创建并使用ruby变量来解决您的问题。尝试在FactoryBot范围之外创建并使用ruby变量来解决您的问题。好的,请看第二个用例。我想说第二个用例只是滥用FactoryBot作为固定装置机制,而事实并非如此。如果可能的话,你只是在螺钉上使用锤子。好的,请看第二个用例。我想说第二个用例只是误用FactoryBot作为固定装置机制,而事实并非如此。如果可能的话,你只是在螺丝上用锤子。