ПРЕДУПРЕЖДЕНИЕ. Нельзя массово назначать эти защищенные атрибуты: id (ar-extensions)

Я использую Rails 2.3.5 и AR-расширения 0.9.3.

Я пытаюсь выполнить массовую вставку из одной таблицы в другую таблицу, расположенную на другом сервере/базе данных. Хотя я не хочу, чтобы что-то было перезаписано. Достаточно простой вставки в конце новой таблицы.

Я заметил, что получаю это предупреждающее сообщение: ПРЕДУПРЕЖДЕНИЕ. Невозможно массово назначить эти защищенные атрибуты: id

Мои прежние записи перезаписываются.. как мне обойти это?

Спасибо!

Редактировать: Разобрался. Похоже, все, что мне нужно, это определить массив атрибутов, которые я хочу (исключая идентификатор), и передать его в функцию импорта.

Обновлять:

tableA_items = TableA.find(:all)

TableB.establish_connection("other_server")
TableB.import tableA_items

person Tommy    schedule 24.01.2011    source источник
comment
Можете ли вы опубликовать код, который вы используете для этого?   -  person Dylan Markow    schedule 25.01.2011
comment
attr_accessible :foo означает, что вы разрешаете массовое назначение foo   -  person apneadiving    schedule 25.01.2011
comment
обновление с кодом. означает ли это, что рельсы автоматически изменят идентификаторы в этом примере?   -  person Tommy    schedule 25.01.2011


Ответы (3)


Эта ошибка существовала в ar-расширениях (до версии 0.9.5, в которой она была исправлена) и в activerecord-import (до версии 0.2.7, в которой она была исправлена).

ar-extensions используется для Rails 2.x. Для Rails 3.x следует использовать activerecord-import. Они поддерживают одни и те же API.

person Zach Dennis    schedule 29.04.2011

Вы можете установить столбец id равным нулю для импортированных элементов перед запуском импорта, чтобы избежать проблемы с массовым назначением:

tableA_items.each {|item| item.id=nil}

Примечание. Похоже, есть новая версия этого драгоценного камня, на которую стоит обратить внимание: https://github.com/zdennis/activerecord-import

person zetetic    schedule 25.01.2011

Я все еще вижу эту же ошибку при использовании activerecord-import 0.2.7 + Rails 3.0.7, но при импорте данных из внешнего файла XML. Вот все это (как миграция Rails, я не знал, как еще ее запустить):

require 'open-uri'

artists = Array.new
Artist.establish_connection("http://localhost:3000")

begin
  open("*some-url*") do | artists_file |
    artists_file.each do | line |
      if line =~ /<artist id="([\w_]*)" name="(.*)"[ <]/
        puts $1, $2

        if line =~ / sort="(.*)"/
          puts $1
        end

        begin
          artist = Artist.new(:id => $1, :name => $2)
          artists << artist
        rescue
          puts "Couldn't add " + $1 + ": " + $!
        end
      end
    end

    Artist.import artists, :validate => true
  end
rescue
  puts "Couldn't open the artists file."
end

РЕДАКТИРОВАТЬ: неважно; проблема в том, что я явно пытаюсь установить значение идентификатора. О!

person NRitH    schedule 09.06.2011