我正在将旧的 Rails 应用程序迁移到 Rails 3.2.11/Ruby 1.9.3。
我们有一个继承自另一个模型ActiveRecord
的模型。加载时,它调用一个方法来设置,为此它需要一个“事件 id”(每个事件都有自己的数据库)。ControlPoint
EventDependent
ControlPoint
EventDependent
table_name
这一切的关键是,我们需要在模型加载时知道“事件 id”。
有control_point_controller
一个before_filter
调用控制器方法来获取所需的“事件ID”(通过参数)。在以前的 Rails 版本中,这始终可以正常工作。
但是在 Rails 3.2.11 中,它有时可以工作……有时却不行!
当它不起作用时,问题是模型的“设置表名”在我们准备好“事件 id”之前被调用。我曾尝试使用调试器对其进行调试,但很多时候,流程不会进入 before_filter 操作,因为在此之前它会失败。其他时候它进入......当它进入时,我们有可用的参数,并且一切正常。
我一直在搜索这个,但找不到任何相关的具体内容。我会说问题在于模型和控制器的加载顺序不固定......它们同时开始加载,有时一个在另一个之前加载。这有意义吗?我认为大约 70% 的时间它不起作用,因为还没有定义“事件 id”(因为它没有执行 before_filter 并且 params 还不存在),而另外 30% 的时间它确实如此。
我的问题是:我可以以某种方式延迟模型的加载吗?或者让它在控制器的 before_filter 之后加载?关于问题可能是什么的任何其他想法?
如果您愿意,我可以发布相关代码。