gpt4 book ai didi

ruby-on-rails - 排列现有数组以播种 Rails 数据库

转载 作者:太空宇宙 更新时间:2023-11-03 16:23:51 28 4
gpt4 key购买 nike

我想用现有对象数组的排列作为我的 Rails 应用程序数据库的种子,但不确定实现此目的的最佳方法。

我目前有一个 Country 模型,具有以下属性:

create_table :countries do |t|
t.string :name
t.float :latitude_dec
t.float :longitude_dec

t.timestamps null: false
end

我已经从一个 .yaml 文件中播种了这个模型(因为这些属性是静态的),现在想使用这些记录来播种一个 CountryPair 模型(其中的属性也是静态的)。该模型将具有以下属性:

create_table :country_pairs do |t|
t.string :country_a
t.string :country_b
t.string :pair_name
t.float :country_a_latitude_dec
t.float :country_b_latitude_dec
t.float :country_a_longitude_dec
t.float :country_b_longitude_dec
t.float :distance

t.timestamps null: false
end

目的是排列Country 对象的数组,并根据每个排列创建一个CountryPair 对象(并使用输出作为数据库的种子)。我了解 Ruby array#permutation方法,但不确定如何将适当的值提取到新的 CountryPair 对象数组中。国家对中的顺序在这里很重要,所以我想使用排列而不是组合。

最后,我还想计算国家对之间的距离,但我希望在填充了 CountryPair 模型后开始计算!!

这是我在阔别 Rails 五年后首次涉足 Rails,如果我在术语/方法上有误,请深表歉意 - 如果需要任何进一步的信息,请务必要求澄清!提前致谢!

最佳答案

您可以在国家/地区播种后将此代码段添加到您的 seeds.rb。

Country.all.permutation(2) do |p| 
CountryPair.create(
country_a: p[0].name,
country_b: p[1].name,
pair_name: p[0]name + p[1].name,
country_a_latitude_dec: p[0].latitude.dec,
country_b_latitude_dec: p[1].latitude.dec,
country_a_longitude_dec: p[0].longitude.dec,
country_b_longitude_dec: p[1].longitude.dec,
distance: # An algorithm to calculate distance
)
end

然后运行它:rake db:setup

关于ruby-on-rails - 排列现有数组以播种 Rails 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28816391/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com