【问题标题】:set_table_name only works once?set_table_name 只工作一次?
【发布时间】:2011-08-31 22:19:40
【问题描述】:

我正在尝试使用 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 不存在!”而出错因为查询仍然认为它是 FROM table_a。

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

更新

添加

Model.reset_column_information

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

【问题讨论】:

    标签: ruby-on-rails ruby activerecord


    【解决方案1】:

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

    【讨论】:

    • 我认为你在正确的轨道上。出现这种情况的原因是因为我的应用程序在开发模式下运行正常。但是,由于 sql from 中的表名不正确,在生产环境中运行测试或部署时会发生错误。这是有道理的,因为生产可能比开发缓存更多。
    • 这个问题的答案是:Model.reset_column_information
    • 将您标记为答案,因为您通过确定根本原因为我指明了正确的方向。
    【解决方案2】:

    你的选择

    rename_table
    

    更多信息AR TableDefinition

    【讨论】:

      猜你喜欢
      • 2017-01-06
      • 2018-06-22
      • 2015-09-18
      • 2013-12-31
      • 1970-01-01
      • 2013-09-28
      • 2013-03-30
      • 2015-06-04
      • 2019-05-18
      相关资源
      最近更新 更多