我不知道如何检查记录是否是新保存的。现在我正在使用
If @item.save @a = Item.where(“restaurant_id = ?”, params[:item][:user_id]).where(“created_at < ?”, 2.minutes.ago)
查询运行正常,但我想知道是否有更好的方法来检查记录是否刚创建。我正在查看ActiveModel::Dirty,但一旦保存了记录,:created_at_changed?将返回false。
r6l8ljro1#
为了记录在案,Rails 4和5现在都有这样的功能。在Rails 4中,您可以执行以下操作:
@item.previous_changes.key?('id')
在Rails 5中:
@item.id_previously_changed?
[NOTE:此处假定您从不手动更新记录的ID。如果您手动更新记录的ID,则需要更类似于以下内容的内容:]
@item.previous_changes.key?('id') && @item.previous_changes['id'][0].nil?
wtzytmuj2#
我认为Rails没有提供任何方法来检查这个问题,你可以使用ActiveRecord实现你自己的方法。
def recently_created? Item.where("restaurant_id = ? AND created_at < ?", params[:items][:user_id], 2.minutes.ago) end
如果您希望将其用于所有ActiveRecord模型,请将其添加到ActiveRecord::Base类中。
shyt4zoc3#
从Rails 6.1开始,您可以用途:
@item.previously_new_record?
3条答案
按热度按时间r6l8ljro1#
为了记录在案,Rails 4和5现在都有这样的功能。
在Rails 4中,您可以执行以下操作:
在Rails 5中:
[NOTE:此处假定您从不手动更新记录的ID。如果您手动更新记录的ID,则需要更类似于以下内容的内容:]
wtzytmuj2#
我认为Rails没有提供任何方法来检查这个问题,你可以使用ActiveRecord实现你自己的方法。
如果您希望将其用于所有ActiveRecord模型,请将其添加到ActiveRecord::Base类中。
shyt4zoc3#
从Rails 6.1开始,您可以用途: