我不知道如何检查记录是否是新保存的。现在我正在使用
If @item.save
@a = Item.where(“restaurant_id = ?”, params[:item][:user_id]).where(“created_at < ?”, 2.minutes.ago)
查询工作正常,但我想知道是否有更好的方法来检查记录是否刚刚创建。我正在调查 ActiveModel::Dirty 但是一旦保存记录,:created_at_changed? 将返回假。
我不知道如何检查记录是否是新保存的。现在我正在使用
If @item.save
@a = Item.where(“restaurant_id = ?”, params[:item][:user_id]).where(“created_at < ?”, 2.minutes.ago)
查询工作正常,但我想知道是否有更好的方法来检查记录是否刚刚创建。我正在调查 ActiveModel::Dirty 但是一旦保存记录,:created_at_changed? 将返回假。
作为记录,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?
我不认为 rails 提供任何方法来检查这一点。您可以使用 ActiveRecord 实现您自己的。
def recently_created?
Item.where("restaurant_id = ? AND created_at < ?", params[:items][:user_id], 2.minutes.ago)
end
如果您希望它用于所有 ActiveRecord 模型,请将其添加到 ActiveRecord::Base 类。