Перестановка существующего массива для заполнения базы данных Rails
Я хотел бы заполнить базу данных приложений 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 #, но не уверен, как вытащить соответствующие значения в новый массив CountryPair
объекты. Здесь важен порядок стран в паре, поэтому я хотел бы использовать перестановки, а не комбинации.
В конечном счете, я также хотел бы рассчитать расстояние между парами стран, но я надеюсь начать выяснять это, как только у меня будет CountryPair
модель заполнена!!
Это мой первый набег в Rails после пятилетнего перерыва, поэтому извиняюсь за неправильную терминологию / методологию - пожалуйста, попросите разъяснений, если потребуется какая-либо дополнительная информация! Заранее спасибо!
1 ответ
Вы можете добавить этот фрагмент в свои seed.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