你好,我有一个特殊的问题.我使用after_commit回调来发送通知,但似乎根本没有触发回调.简化情况如下:
class Message < ActiveRecord::Base
after_commit :do_something
def do_something
raise 'Doing something'
end
end
Run Code Online (Sandbox Code Playgroud)
然后我打算在打开控制台并创建消息时看到加注.但没有任何反应.此外,如果我完全删除'do_something'方法,rails甚至不会抱怨.请注意,这不是使用事务夹具的测试.我甚至看到了在db中提交的记录.我的rails版本是3.0.9.感谢任何帮助,特别是如果它是好的:-)
编辑:我后来了解到,当我将代码部署到另一台机器时,会触发回调DID.所以它必须是我的设置.我仍然会感谢您对可能导致此问题的看法.
Edit2:来自评论.
我有一个谜,我没有答案。我用 C++ 编写了一个简单的程序(我应该说我不是专业的 C++ 开发人员)。这里是:
#include <iostream>
int main(){
const int SIZE = 1000;
int pool1 [SIZE];
int pool2 [SIZE];
int result [SIZE*SIZE];
//Prepare data
for(int i = 0; i < SIZE; i++){
pool1[i] = i + 1;
pool2[i] = SIZE - i;
}
//Run test
for(int i = 0; i < SIZE; i++){
for(int j = 0; j < SIZE; j++){
result[i*SIZE + j] = pool1[i]*pool2[j];
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该程序似乎可以工作(我用它作为不同语言的基准),但后来我用 valgrind 运行它,它开始抱怨:
==25912== Invalid read of size …Run Code Online (Sandbox Code Playgroud) 我正试图在红宝石中完成这段元编程
my_array = 1..10
method = :each
my_array.send(method) {|num| puts num }
Run Code Online (Sandbox Code Playgroud)
这不起作用.有人知道如何动态传递块吗?我已经尝试过了:
my_array.send(:each, lambda{|num| puts num })
my_array.send(:each, Proc.new{|num| puts num })
Run Code Online (Sandbox Code Playgroud)
但没有任何效果.谢谢!