Ruby on rails Rails-模型最近3次更新记录的比较

Ruby on rails Rails-模型最近3次更新记录的比较,ruby-on-rails,ruby,Ruby On Rails,Ruby,我对RubyonRails中的比较有意见。我想检查全名是否是数据库中最后3条更新的记录。出于某种原因,它会检查整个数据库 if Playlist.where(fullname: @last_fullname).order(updated_at: :desc).limit(3).exists? puts "records exists in last 3 updated records" else puts "record not found" end 不确定语法是正确的还是应该被分解。

我对RubyonRails中的比较有意见。我想检查全名是否是数据库中最后3条更新的记录。出于某种原因,它会检查整个数据库

if Playlist.where(fullname: @last_fullname).order(updated_at: :desc).limit(3).exists?
  puts "records exists in last 3 updated records"
else
  puts "record not found"
end
不确定语法是正确的还是应该被分解。它没有给我一个错误,但结果不是预期的

编辑:预期结果是,当记录不在最近3次更新的范围内时,它应该给出“未找到记录”。如果记录在最近3次更新的记录中,则应给出“记录存在于最近3次更新的记录中”

当@last_fullname存在于数据库中时,我得到的结果是,它将始终给出“记录存在于最近3次更新的记录中”,即使它不在最近3次更新的记录中

只有当数据库中不存在记录时,我才会得到“未找到记录”


有什么想法吗?

只有通过子查询才能在数据库级别实现这一点:选择最后3条记录,然后从最后3条记录中搜索全名。您的示例查询所做的是搜索具有给定全名的所有记录,并按更新的\u排序。鉴于您只需要3条记录,您可以在用户空间中执行此操作:

Playlist.order(updated_at: :desc).limit(3).any?{ |playlist| playlist.fullname == @last_fullname }

您只能通过子查询在数据库级别实现这一点:选择最后3条记录,然后从最后3条记录中搜索fullname。您的示例查询所做的是搜索具有给定全名的所有记录,并按更新的\u排序。鉴于您只需要3条记录,您可以在用户空间中执行此操作:

Playlist.order(updated_at: :desc).limit(3).any?{ |playlist| playlist.fullname == @last_fullname }

请向我们显示实际结果和预期结果。您应该在最后3条记录查询之外搜索
full\u name
,而不是在
where
子句中。请向我们显示实际结果和预期结果。您应该在最后3条记录查询之外搜索
full\u name
,不在
where
子句中。感谢@bcd的解释。这解决了问题。感谢@bcd的解释。这就解决了问题。