1

我们有一个 Rails 应用程序,其中 after_create 从初始化程序动态添加到 ActiveRecord 模型。

我们已经尝试了 instance_eval

Foo.instance_eval do
  send "after_create", lambda{|r| r.some_method}
end

和 class_eval

Foo.class_eval do
  after_create lambda{|r| r.some_method}
end

Foo.new._create_callbacks在创建它们之后运行时,它会返回两个回调。

在向 Rails 服务器发出请求后,两个回调消失了。

这个问题只发生在开发中。分期和生产工作正常。

当在回调中设置config.cache_classes = true 时,development.rb回调将持续存在并且不会消失。

我们已经在其他应用程序中复制了这段代码,它工作正常,所以可能是配置问题。

注意:我们正在使用带有lvh.me的子域

  • 导轨 3.1.1
  • 红宝石 1.9.2-p180

谢谢 :)

4

2 回答 2

2

这个问题似乎是一个类似的问题,关于开发模式下的猴子补丁,它有一个潜在的解决方案:

如何对在 Rails 中自动加载的代码进行猴子补丁?

于 2012-08-30T01:17:53.520 回答
0

在开发模式下的 Rails 中,当有新请求进入时,所有模型都会重新加载。这很有用,因为您不必在每次更改某些内容时都重新启动服务器。但是,在 prod 中这不会发生,因为存在性能损失。这里的问题是初始化程序仅在 Rails 应用程序初始化期间运行。我可能会问你为什么要在初始化程序中设置 after_create 而不是模型本身?

于 2012-08-30T00:09:09.443 回答