Rails 请教如何解决在 after_create block 中 id 是 0 的问题

anklos · 2012年05月23日 · 最后由 anklos 回复于 2012年05月23日 · 3285 次阅读

遇到个问题,调试无果,想请教下大家。

简单的说就是创建一个 model 后,在 after_create 中拿到的新创建的实例的 id 是 0(其他的属性的值都是正确的)。蛋疼的是,在同一个 project 里,有的 model 可以拿到正确的 id,有的拿不到。我比较了这些 model 和 controller,没发现什么特别不一样的地方。。

另外在 debug 的时候,我可以从 belongs_to 的 parent 的实例里看到已经创建的这个实例,并且 id 也存在。但是 self.id 是 0。

我自己新创建一个 rails3 的 project 调试过,在 after_create 是肯定能拿到 id 的。

我试过 after_create,after_commit 里都拿不到正确的 id 值。

环境是 rails 3.1.4

请问下可能造成这种情况的原因是什么?谢谢!

匿名 #1 2012年05月23日

试试 after_commit 呢,如果不行,看看 model 里面有没有方法被覆盖了,这个是造成很奇怪问题的一个原因,我就碰到过

匿名 #2 2012年05月23日

只会用 after_save 的人飘过

升级试试

找到问题了,是 table 里 id 不是 primary key 的问题。

因为项目中把一些 mysql 里旧的 table 直接映射到 view 里,而 view 本身是不带 primary key 的。虽然 view 是可以从原来的 table 里继承 primary key 的,但似乎 mysql2 的 gem 不支持。

我在 model 里 set_primary_key :id 也没用,暂时只能 hack 一下了,就是拿表里最后一个数据的 id。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号