Добавление ключей и ассоциаций к существующим наборам данных - PullRequest
1 голос
/ 05 августа 2020

Я работаю над своим первым ruby сайтом на рельсах, поэтому go мне проще!

Я создаю веб-сайт с единственной целью - запрашивать два существующих набора данных, поэтому данных нет ввод необходим в приложении. У меня есть два набора данных для загрузки на веб-сайт: Locations и Train_Journeys. В одном месте может быть много поездок на поезде. Путешествие на поезде имеет одно местоположение.

В необработанных данных (перед загрузкой на веб-сайт) - в Locations есть существующий заполненный столбец уникального идентификатора с именем locationid, а в таблице Train_Journeys есть столбец внешнего ключа location_id, который ссылается на запись в Местоположение.

Мне нужно создать ассоциацию в Rails, чтобы я мог просмотреть местоположение, а затем просмотреть список связанных поездок на поезде. Большинство руководств и вопросов, которые я нашел в Интернете, имеют смысл, но предназначены для создания новых таблиц, в которых данные будут создаваться, а не загружаться. Я думаю, что мне нужно создать настраиваемый первичный ключ для Locations?

Вот что у меня есть на данный момент. Ошибка на этапе заполнения (для таблицы местоположений).

NoMethodError: undefined method `locationid = 'for #Location: 0x0000000003ec5a60

Создание модели местоположения

class CreateLocations < ActiveRecord::Migration[5.0]
  def change
    create_table :locations, id: false, primary_key: :locationid do |t|
      t.text :name
      t.etc.......
    end
  end
end

Создание модели train_journey

class CreateTrainJourneys < ActiveRecord::Migration[5.0]
  def change
    create_table :train_journeys do |t|
      t.integer :location_id
      otherfields....
      t.timestamps
    end
  end
end

Location.rb

class Location < ApplicationRecord
  has_many :train_journeys
  self.primary_key = "locationid"
    
end

Train_journeys.rb

class TrainJourney < ApplicationRecord
    has_one :location
end

Код семян

require 'csv'

csv_text = File.read(Rails.root.join('lib', 'seeds', 'locations.csv'))
csv = CSV.parse(csv_text, :headers => true, :encoding => 'ISO-8859-1')
csv.each do |row|
  t = Location.new
  t.name = row['name']
  t.locationid = row['locationid']
  t.population = row['population']
  t.etc.....

1 Ответ

0 голосов
/ 06 августа 2020

Думаю, у вас может быть проблема с моделями. Попробуйте установить расположение как отношение belongs_to в модели TrainJourney, и при миграции сделайте следующее:

create_table :train_journeys do |t|
      t.integer :location_id

Поскольку вы сохраняете идентификатор местоположения в таблице TrainJourney. Итак, это belongs_to. Если бы вы хранили ключ в таблице Location, это было бы has_one отношение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...