我有下面这段代码,它将数据从数据库A中的映像表(shard_A)复制到数据库B中的另一个表(shard_B)
下面是两个数据库中的image表的结构
Image table (shard_A) - Image table (shard_B)
- image_id - image_id
- submission_fk - sub_fk
- image_desc - img_desc两个表的列名略有不同
@test_shard_A = Image.using(:shard_A).find(:first, :conditions => ["submission_fk =?", @sub.id ])
Octopus.using(:shard_B) do
Image.create(
:image_id => @test_shard_A.image_id,
:sub_fk => @test_shard_A.submission_fk,
:img_desc => @test_shard_A.image_desc
) do |primary|
primary.img_id = @test_shard_A.image_id
end
end上面给出了以下错误消息:
unknown attribute: sub_fk我做错了什么?
发布于 2013-01-17 19:15:19
当对表执行第一次查询时,ActiveRecord加载元数据(表信息)。当您使用对shard_A的查询启动应用程序时,它会检查表结构,并使用submission_fk根据表结构构造Image类。
当您更改分片时,它不会再次检查表结构,因此它假定有一个submission_fk,并且假定没有sub_fk,因为它不知道这一点。
我建议你对所有的分片使用相同的结构,但如果你不能做到这一点,你可能会强制ActiveRecord到reload the table information -我从未使用过Octopus,但我认为它会起作用:
Image.reset_column_information请注意,这会降低应用程序的性能,因为重新加载元数据是一个很慢的操作。
https://stackoverflow.com/questions/14377703
复制相似问题