Ruby on rails Factorybot在使用帮助器时返回相同的属性

Ruby on rails Factorybot在使用帮助器时返回相同的属性,ruby-on-rails,ruby,random,factory-bot,Ruby On Rails,Ruby,Random,Factory Bot,创建了一个助手来读取csv文件,并为对象提供随机geojson数据 当我在rails控制台中调用这个助手时,我得到了预期的随机位置数据 #LocationTestHelper def csv_数据 file_path=Rails.root.join('spec','factories','files','locations.csv')) csv\u text=File.read(文件路径) 解析(CSV_文本,标题:true) 结束 def随机位置 nb_items=csv_data.lengt

创建了一个助手来读取csv文件,并为对象提供随机geojson数据

当我在rails控制台中调用这个助手时,我得到了预期的随机位置数据

#LocationTestHelper
def csv_数据
file_path=Rails.root.join('spec','factories','files','locations.csv'))
csv\u text=File.read(文件路径)
解析(CSV_文本,标题:true)
结束
def随机位置
nb_items=csv_data.length-1
索引=Random.rand(0..nb_项)
位置=csv\u数据[索引]。到\u散列
结束
但当我在工厂机器人工厂中使用它时,构建或创建工厂总是返回相同的位置数据

#events.rb工厂
需要“./spec/factories/scripts/location\u importer”
FactoryBot.define do
工厂:事件处理
位置=LocationTestHelper.random\u位置
地址{location['street']}
城市{location['city']}
国家{location['country']}
纬度{位置['latitude']}
经度{location['longide']}
结束
结束
然后在种子文件中使用它,创建具有相同位置数据的记录 如何在每个工厂实例上获得新的位置数据?我错过了什么

#seeds.rb
15.5倍
创建(:事件)
结束
``
`

值得注意的是,工厂在加载文件时只评估一次。因此,您的
位置以后不会再更改

但您可以使用以下方法解决您的问题:


值得注意的是,工厂在加载文件时只评估一次。因此,您的
位置以后不会再更改

但您可以使用以下方法解决您的问题:


非常感谢。虽然瞬态属性只能用于实际模型属性,但我应该更好地阅读文档谢谢!虽然transient属性只能用于实际的models属性,但我应该更好地阅读文档
FactoryBot.define do
  factory :event do
    transient do
      location { LocationTestHelper.random_location }
    end

    address { location['street'] }
    city { location['city'] }
    country { location['country'] }
    latitude { location['latitude'] }
    longitude { location['longitude'] }
  end
end