set_table_name只能工作一次吗?

时间:2011-08-30 20:39:22

标签: ruby-on-rails ruby activerecord

我试图使用set_table_name在几个不同的表上使用一个通用模型。但是,似乎set_table名称仅适用于每个应用程序会话一次的类。例如,在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),以便查询不会因为&tableff.id而存在错误!'因为查询仍然认为它是FROM table_a。

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

更新

添加

Model.reset_column_information

在set_table_name之后强制模型按预期工作。 参考文献http://ar.rubyonrails.org/classes/ActiveRecord/Base.html#M000368

2 个答案:

答案 0 :(得分:1)

这可能是未记录的限制。一旦SHOW FIELDS FROM被执行,即column_names的结果来自的地方,它通常被缓存,至少在请求期间。如果必须,请尝试使用控制台reload!方法重置内容。

答案 1 :(得分:0)

您的选择

rename_table

AR TableDefinition

的更多信息