Перестановка существующего массива для заполнения базы данных 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

Другие вопросы по тегам