5

我不知道如何检查记录是否是新保存的。现在我正在使用

 If @item.save
      @a = Item.where(“restaurant_id = ?”, params[:item][:user_id]).where(“created_at < ?”, 2.minutes.ago)

查询工作正常,但我想知道是否有更好的方法来检查记录是否刚刚创建。我正在调查 ActiveModel::Dirty 但是一旦保存记录,:created_at_changed? 将返回假。

4

2 回答 2

17

作为记录,Rails 4 和 5 现在都有这方面的功能。

在 Rails 4 中,您可以执行以下操作:

@item.previous_changes.key?('id')

在 Rails 5 中:

@item.id_previously_changed?

[注意:这假设您从未手动更新记录的 ID。如果你是,你将需要更多类似以下的东西:]

@item.previous_changes.key?('id') && @item.previous_changes['id'][0].nil?
于 2017-05-17T23:41:57.123 回答
1

我不认为 rails 提供任何方法来检查这一点。您可以使用 ActiveRecord 实现您自己的。

def recently_created?
  Item.where("restaurant_id = ? AND created_at < ?", params[:items][:user_id], 2.minutes.ago)
end

如果您希望它用于所有 ActiveRecord 模型,请将其添加到 ActiveRecord::Base 类。

于 2013-08-25T01:50:45.353 回答