有没有办法在使用find_or_create_by创建记录后判断记录是否为新记录

时间:2011-12-02 19:23:42

标签: ruby-on-rails ruby mongoid

我正在使用此代码:

item = Item.find_or_create_by(:name => title.strip)
if item.changed?
   results.newItemsCount += 1
end

我想获取新创建的记录记录数。我希望.changed属性对于新创建的项目是真的,但看起来并非如此。代码的下一部分可能会修改项目,即使它不是新的,所以如果项目是新的,我真的需要在这里知道。

有没有办法判断记录是否是新记录?没有看到in the docs之类的东西。你认为只是设置标题(在构造函数中)将符合改变的条件,但似乎没有发生。

1 个答案:

答案 0 :(得分:6)

我认为无法使用changed?persisted?方法找到或创建调用。

相反,您可以通过find_or_initialize_by执行此操作。在这里,您可以检查persisted?值以确定该项目是否为新项目。如果它是假的那么你知道它是一个新文件。

item = Item.find_or_initialize_by(:name => title.strip)
unless item.persisted?
   item.save 
   results.newItemsCount += 1
end

其他方式是您可以使用after_create回调。如果它是一个新项目,将触发此回调。你可以在这里进行操作。

希望有所帮助