0

Rails 2.3.8 でポリモーフィック モデルにシードしようとしているデータがたくさんあります。すべてのデータの関連付けは、County モデルに関連付けられています。データは次のようになります。

data = Datum.create([
  ...
  { :value => '14389', :value_type => County, :value_id =>'3103'},
  { :value => '59013', :value_type => County, :value_id =>'3105'},
  { :value => '17117', :value_type => County, :value_id =>'3106'},
  ...
])

:value_type => County の値は、「String:Class の未定義のメソッド `base_class'」につながります。

データベースにシードしたいこれらの値が何万もあります。上記の値と似ていますが、郡モデル、州モデル、都市モデルに関連付けられているものがあります。これらは、データベースへのシード後に編集されない静的な値です。

モデルを :value_type フィールドにシードするにはどうすればよいですか?

(または... 私はこれに間違ってアプローチしていますか?もしそうなら、どのようにアプローチしますか?)

編集: schema.rb ファイルの関連部分:

アイザック -

create_table "data", :force => true do |t|
  t.integer  "value"
  t.string   "value_type"
  t.integer  "value_id"
  t.datetime "created_at"
  t.datetime "updated_at"
end

create_table "counties", :force => true do |t|
  t.string   "name"
  t.integer  "state_id"
  t.integer  "ansi_code"
  t.string   "ansi_class"
  t.datetime "created_at"
  t.datetime "updated_at"
end

私もシードで次のことを試しましたが、うまくいきませんでした(郡は引用符で囲まれています):

{ :value => '14389', :value_type => 'County', :value_id =>'3103'},
4

2 に答える 2

2

スキーマに「value」列は絶対に必要ありません。「value_id」と「value_type」だけです。次に、シード データは次のようになります。

...
{ :value_id => 12345, :value_type => "County" },
...

「County」は引用符で囲まれた文字列であることに注意してください。

別の方法として、次のようにします。

{ :value => County.find(12345) }

その後、Rails は郡レコードのクラス名と ID に基づいて、列:value_typeと列を自動的に設定します。:value_idこの例では、何が起こっているのかをよりよく理解できるかもしれません。ただし、何千ものレコードの場合、これははるかに遅くなるため、この場合はおそらく最初のアプローチが適しています。

于 2010-07-14T03:02:26.947 に答える
1

これは、モデルでこれを行ったために発生しています。

belongs_to :value, :polymorphic => true

また、テーブルにも値列を設定しようとしているからです。Rails は、このメソッドを介して関連付けを設定するか列を設定するかの違いを判断できません。列を設定するには、これを使用します。

self[:value] = "something"
于 2010-07-14T02:19:07.237 に答える