Предварительная загрузка данных без путаницы при загрузке данных во второй раз - PullRequest
0 голосов
/ 28 декабря 2010

Вот так выглядит моя модель

User
belongs_to :computer

Computer
has_many :user

Пользователи создаются, когда люди регистрируют учетную запись на веб-сайте, но на компьютерах предварительно загружаются данные, которые я создаю в seed.rb / some .rake.файл.Все хорошо, когда приложение запускается впервые, и люди начинают регистрироваться и связываются с правильным computer_id.Однако предположим, что я хочу добавить еще один компьютер в список

Computer.destroy_all
Computer.create({:name => "Akane"})
Computer.create({:name => "Yoda"})
Computer.create({:name => "Mojito"}) #newly added

, когда второй раз запускается файл rakefile, что приведет к путанице ассоциаций, поскольку computer_id в таблице User ссылается на старый идентификатор в таблице Computer.Поскольку я запустил сценарий выше, идентификатор внутри таблицы компьютеров продолжает увеличиваться, не принимая во внимание связь с ним пользователя.Теперь все пользователи не будут иметь никаких ссылок на свой компьютер, и все компьютеры теперь имеют новые идентификаторы.

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

1 Ответ

0 голосов
/ 28 декабря 2010

Вы думали о том, чтобы просто выполнить миграцию для таблицы компьютеров?

скажем, ваша миграция называется db / migrate / 1_create_computers.rb

    $    rake db:migrate:down version=1

из семян удалить метод уничтожения. Вы всегда будете хранить таблицу пользователей ... в которой, кстати, у вас должен быть столбец computer_id

и, конечно, ассоциация выходит

  ComputerClass < ActiveRecord::Base
      has_many :users  #(don't forget the 's')
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...