Ruby on rails set_table_name只工作一次?

Ruby on rails set_table_name只工作一次?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我试图使用set_table_name在两个不同的表上使用一个通用模型。但是,似乎set_table name在每个应用程序会话中只对类起作用一次。例如,在rails 3控制台(ruby 1.8.7)中,会发生以下情况: GenericModel.set_table_name "table_a" puts GenericModel.table_name # prints table_a pp GenericModel.column_names # prints the columns assoc

我试图使用set_table_name在两个不同的表上使用一个通用模型。但是,似乎set_table name在每个应用程序会话中只对类起作用一次。例如,在rails 3控制台(ruby 1.8.7)中,会发生以下情况:

GenericModel.set_table_name "table_a"
puts GenericModel.table_name # prints table_a
pp GenericModel.column_names # prints the columns associated with table_a

GenericModel.set_table_name "table_b"
puts GenericModel.table_name # prints table_b
pp GenericModel.column_names # still prints the columns associated with table_a
目前我发现的解决方法是添加.from(table_b),这样查询就不会出错为“table_b.id不存在!”因为查询仍然认为它来自表a

其他人能重现这个问题吗?这是set_table_name的预期行为吗

更新

添加

Model.reset_column_information
在set_table_name之后,将强制模型按预期工作。
这可能是一个未记录的限制。一旦执行了中的
显示字段(这是
列名称
的结果的来源),它通常会被缓存,至少在请求期间是如此。如果必须,请尝试使用控制台
重新加载重置内容的方法。

这可能是未记录的限制。一旦执行了
中的
显示字段(这是
列名称
的结果的来源),它通常会被缓存,至少在请求期间是如此。如果必须,请尝试使用控制台
重新加载重置内容的方法。

您的选择

rename_table
更多信息,请访问您的选择

rename_table

更多信息请访问

我认为您的思路是正确的。出现这种情况的原因是因为我的应用程序在开发模式下运行正常。但是,在运行测试或在生产环境中部署时,由于sql源中的表名不正确而发生错误。这是有道理的,因为生产缓存可能比开发缓存多得多。这个问题的答案是:Model.reset\u column\u information将您标记为答案,因为您通过确定根本原因为我指明了正确的方向。我认为您走在了正确的轨道上。出现这种情况的原因是因为我的应用程序在开发模式下运行正常。但是,在运行测试或在生产环境中部署时,由于sql源中的表名不正确而发生错误。这是有道理的,因为生产缓存可能比开发缓存多得多。这个问题的答案是:Model.reset\u column\u information将您标记为答案,因为您通过确定根本原因为我指明了正确的方向。