2011-01-24 10 views
3

私は私は1つのテーブルから一括挿入しようとしているのRails 2.3.5とAR-拡張0.9.3警告:これらの保護属性大量割り当てることができません:ID(AR-拡張)

を使用しています別のサーバー/データベースにある別のテーブルにコピーします。私は何も上書きしたくない。新しいテーブルの最後に簡単な挿入だけで十分です。

私は、この警告メッセージが表示されますことに気づいた: 警告:これらの保護属性を大量に割り当てることができません:ID

私の以前のエントリが上書きされている...ので、どのように私はこれを回避するのですか?

ありがとうございます!

編集:それを考え出してください。私が必要とする属性の配列(idを除く)を定義して、それをインポート関数に送り込むだけのようです。

更新:

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

注:

tableA_items = TableA.find(:all) 

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

これを行うために使用しているコードを投稿できますか? –

+0

attr_accessible:fooはfooの大量割り当て – apneadiving

+0

の更新をコードで許可することを意味します。 この例では、レールが自動的にIDを変更するという意味ですか? – Tommy

答えて

0

あなたはmass_assignmentの問題を回避するために、インポートを実行する前に、輸入品目にnilにid列を設定することができますこれは、新しいありますように見えますあなたが見たいかもしれないこの宝石のバージョン:https://github.com/zdennis/activerecord-import

1

この拡張機能は、ar拡張子(固定された0.9.5まで)に存在します。 nd activerecord-import(0.2.7までは修正されました)。

Rails 2.xではar-extensionsが使用されています。 Rails 3.xではactiverecord-importを使用する必要があります。彼らは同じAPIをサポートしています。

0

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:用事。問題は私が明示的にID値を設定しようとしていることです。 D'oh!

関連する問題