我有许多遗留数据库,我需要从中提取原始数据。数据库中的每个表都具有任意名称和任意字段集合。我已经使用以下类访问这些字段:
class Frt < ActiveRecord::Base
establish_connection :legacy
set_primary_key "point"
end
当我到达代码中我知道表名的位置时,我可以调用:
Frt.set_table_name "table"
t = Frt.find_by_sql("blah")
something = t.field_name + t.other_field_name
etc...
问题在于我已经意识到这会将可访问的字段名称锁定到我先选择的任何表中。如果我尝试用另一个调用`set_table_name'方法来更改表,它会更改类的属性,但是任何新实例仍将具有与第一个相同的字段集。到目前为止,在我的应用程序中,我不需要任何其他内容,但我正在扩展程序,我知道它会在我的路上咬我。
我已经尝试过`Frt.send:set_table_name“new_table”',希望它会让ActiveRecord再次成为魔法。它没有。
有人可以建议我如何能够保持ActiveRecord的便利性,但是让它为我需要加载的任何表动态重新映射其字段吗?
答案 0 :(得分:1)
我从未使用它,但Magic Model Generator声称会自动为表创建模型。
答案 1 :(得分:1)
很抱歉回答我自己的帖子,但我想我没解释得很好。如果其他人在此之后出现,我需要做的是发出对“Frt.reset_column_information”方法的调用。我正在重新审视这个问题,只是将所有方法转储到ActiveRecord类上,发现一个潜伏在列表中。
答案 2 :(得分:0)
解决此问题的更好方法是为需要与之交互的每个遗留表创建一个模型 - 不需要动态表名重新映射,并且它可以直接使用。