出于各种原因,我不会进入这里,我们需要为我们的几个模型实现每个客户的表设置。对于大多数客户,默认表格会很好。但是对于一些人来说,我们需要将模型指向不同的表格。表名作为custom_table_name存储在客户记录中。这是我在Rails(2.3.10)中尝试的方法:
g rails
在控制台中,假设ID为10的客户将custom_table_name设置为“big_co_foos”
Foo.customer = Customer.find(10)
Foo.table_name
#outputs "Foo.table_name called"
#then "big_co_foos"
到目前为止看起来不错,但请再次尝试拨打Foo.table_name
Foo.table_name
#outputs "foos"
表名不是“坚持”。据我所知,super
中对self.table_name
的调用是罪魁祸首。如果我不在该方法中调用super,则每次调用本地函数。但我显然不会在这里重新实现table_name。我怀疑我必须忽略类方法继承与实例方法的关系。有什么建议吗?
另外,我尝试使用类变量(@@ customer),但这并没有什么区别。
在查看Rails源代码后,我尝试调用reset_table_name
而不是super
,但它似乎与调用super
具有相同的结果(即后续调用{{} 1}}被绕过)。
更新:这似乎正常工作
Foo.table_name