小编Ren*_*nra的帖子

Rails不会触发我的after_commit回调

你好,我有一个特殊的问题.我使用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:来自评论.

  • DB是MySQL,因此存在事务.
  • 指定回调的操作没有帮助(:on =>:create).
  • 我需要after_commit而没有其他回调

activerecord ruby-on-rails

8
推荐指数
2
解决办法
8730
查看次数

Valgrind - 无效读写

我有一个谜,我没有答案。我用 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)

c c++ valgrind

3
推荐指数
1
解决办法
1955
查看次数

使用send接受块的方法

我正试图在红宝石中完成这段元编程

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)

但没有任何效果.谢谢!

ruby

2
推荐指数
1
解决办法
757
查看次数

标签 统计

activerecord ×1

c ×1

c++ ×1

ruby ×1

ruby-on-rails ×1

valgrind ×1