新手问题 什么时候需要使用 Available Callbacks?

QueXuQ · 2012年10月18日 · 最后由 QueXuQ 回复于 2012年10月23日 · 2345 次阅读

突然想到一个问题,我想问一下大家的设计思路。

Available Callbacks就是如下的方法:
before_validation
after_validation
before_save
around_save
before_create
around_create
after_create
after_save
.....

我举个after_save的来说一下,after_save就是当数据存储后执行 model 下的一个方法。 其实直接在 controller 下写也是可以的,例如:

@x = X.first
@y = Y.first
@x.name = 'QQ'
if @x.save
  @y.name = 'YY'
end

这样的一个描述也是等同于当@x在 save 后,执行。

当然当多个地方会产生@x.save的时候,为了方便重构,使用 after_save 是非常方便的。 但是只有一个地方需要用到的时候,请问两者的使用上来说,有什么不一样呢?推荐那种做法比较好?性能上有区别吗?

对于这个问题,我觉得有个问题比较严重。 就是当一个数值一定要确保他存储了,才可以执行后面的方法。 如果是数值没有存储,后面的方法执行了。 如是是数值存储了,后面的方法没有执行。 都是非常破坏性的。

怎么样避免这样的方法会比较好呢?

if @x.save
  @y.save  #这样执行,又怕如果@x存储了,后面@y又没有存储成功。

after_save  #也存在这样的问题,请问大家是怎么处理这类问题的呢?

#1 楼 @QueXuQ 楼主可以看看有关 transaction 的内容。

#2 楼 @46569 有没有什么介绍呢?在 guides 里没见到有。翻了几本书都没发现。

请问有朋友知道这个学问吗?

#5 楼 @zgm transaction 的用法比较神奇,第一次见,看看怎么样。感激不尽。

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