удаление атрибутов из модели ActiveRecord - PullRequest
4 голосов
/ 01 марта 2011

Я перемещаю данные между двумя соединениями activerecord, все мои модели настроены правильно, поэтому я могу читать, скажем, Legacy :: Tablename и Tablename и вставить их в новую таблицу.

Проблема, с которой я столкнулся, состоит в том, что моя новая модель не имеет всех атрибутов, которые есть в унаследованной модели, поэтому я получаю «неизвестный атрибут», когда пытаюсь создать запись в новой модели через;

legacy_users = Legacy::User.all
legacy_users.each do |legacy_user|
  User.create legacy_user.attributes
end

однако, если я попытаюсь удалить атрибут-нарушитель, он все равно не будет работать, например.

legacy_user.attributes.delete 'some_attribute'

Может кто-нибудь предложить какие-нибудь указатели?

Ответы [ 3 ]

11 голосов
/ 01 марта 2011

Как насчет attribute.except (: some_attribute)?

1 голос
/ 01 марта 2011

Это должно работать в таком случае:

legacy_users = Legacy::User.all
legacy_users.each do |legacy_user|
  u = User.new

  u.attributes.each do |k, v|
    old_val = legacy_user.send(k) # Get the attr from old user
    u.send("#{k}=", old_val) # Set it to the new user
  end
end

Тебе не нужно разбираться с путаницей удаления каждого неиспользуемого атрибута

0 голосов
/ 23 декабря 2016

Я также работаю над миграцией, и в моем случае я передавал блок first_or_create для клонирования объектов.Я не мог заставить delete() или except() работать, но по какой-то причине это работает:

scrubbed_obj = my_obj.attributes.reject { |k,v| k == 'the_attribute_you_dont_want' }

new_object.attributes = scrubbed_obj

и затем блокэкономит нормально.Просто бросьте этот ответ, если кто-то еще столкнется с подобными проблемами.

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