首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何确定记录是刚在after_save中创建还是更新

如何确定记录是刚在after_save中创建还是更新
EN

Stack Overflow用户
提问于 2011-02-12 07:30:56
回答 6查看 62K关注 0票数 105

#new_record?函数确定记录是否已保存。但在after_save钩子中,它始终是假的。有没有一种方法可以确定记录是新创建的记录还是更新中的旧记录?

我希望不要使用另一个回调函数,比如before_create来在模型中设置一个标志,或者需要对数据库进行另一个查询。

任何建议都是值得感谢的。

编辑:需要在after_save钩子中确定它,对于我的特定用例,没有updated_atupdated_on时间戳

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-08-25 08:41:06

我想用它来做一个after_save回调。

一种更简单的解决方案是使用id_changed? (因为它在update上不会改变),甚至在存在时间戳列的情况下使用created_at_changed?

更新:正如@mitsy指出的那样,如果需要在回调之外进行此检查,则使用id_previously_changed?。参见docs

票数 184
EN

Stack Overflow用户

发布于 2011-02-12 08:58:24

据我所知,这里没有rails的魔力,你必须自己来做。你可以使用一个虚拟属性来清理它...

在模型类中:

代码语言:javascript
复制
def before_save
  @was_a_new_record = new_record?
  return true
end

def after_save
  if @was_a_new_record
    ...
  end
end
票数 32
EN

Stack Overflow用户

发布于 2013-09-16 01:36:57

由于该对象已保存,因此您需要查看之前的更改。ID应仅在创建后更改。

代码语言:javascript
复制
# true if this is a new record
@object.previous_changes[:id].any?

还有一个实例变量@new_record_before_save。您可以通过执行以下操作来访问它:

代码语言:javascript
复制
# true if this is a new record
@object.instance_variable_get(:@new_record_before_save)

这两个都很难看,但是它们可以让你知道对象是否是新创建的。希望这能有所帮助!

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4975106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档