ВНИМАНИЕ: Не удается назначить массово эти защищенные атрибуты: id (ar-extensions) - PullRequest
3 голосов
/ 25 января 2011

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

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

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

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

Спасибо!

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

Обновление:

tableA_items = TableA.find(:all)

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

Ответы [ 3 ]

1 голос
/ 29 апреля 2011

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

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

0 голосов
/ 10 июня 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

EDIT: nevermind;проблема в том, что я явно пытаюсь установить значение идентификатора.D'ой! * * 1004

0 голосов
/ 25 января 2011

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

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

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

...