我有很多数据,我正试图在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 =>县值导致“String:Class的未定义方法`base_class”。“
我有数以万计的这些值,我想在数据库中播种。它们类似于上面的值,除了一些与County模型相关联,一些与State模型相关,一些与City模型相关。它们是静态值,在播种到数据库后不会被编辑。
如何将模型植入: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'},
答案 0 :(得分:2)
您绝对不需要架构中的“值”列 - 只需“value_id”和“value_type”。然后您的种子数据应如下所示:
...
{ :value_id => 12345, :value_type => "County" },
...
请注意,“县”是引号中的字符串。
另一种选择是:
{ :value => County.find(12345) }
然后Rails会根据县记录的类名和ID自动为您设置:value_type
和:value_id
列。这个例子可以让你更好地了解发生了什么。但是,对于成千上万的记录来说,这会慢很多,所以第一种方法可能更适合这种情况。
答案 1 :(得分:1)
这种情况正在发生,因为您已在模型中完成此操作:
belongs_to :value, :polymorphic => true
因为你也试图在表格上设置值列。 Rails将无法区分您通过此方法设置关联或列。要设置列,请使用:
self[:value] = "something"