0

我有很多数据试图在 Rails 2.3.8 中植入多态模型。所有数据的关联都与县模型有关。数据如下:

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 会根据 County 记录的类名和 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 回答