Ruby on rails Factorybot在使用帮助器时返回相同的属性
创建了一个助手来读取csv文件,并为对象提供随机geojson数据 当我在rails控制台中调用这个助手时,我得到了预期的随机位置数据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
#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