我想通过现有对象数组的排列来为我的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,所以如果我的某些术语/方法有误,请向我道歉 - 如果需要进一步的信息,请要求澄清!提前谢谢!
答案 0 :(得分:1)
您可以在种子播种后将此片段添加到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