我在Ruby on Rails中遇到了比较问题。我想检查一个fullname是否是数据库中最后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次更新的。
当它没有退出数据库时,我只得到“未找到记录”。
有什么想法吗?
答案 0 :(得分:4)
只能使用子查询在数据库级别实现此目的:选择最后3条记录,并从最后3条记录中搜索fullname。您的示例查询所做的是搜索具有给定fullname的所有记录,并按updated_at进行排序。鉴于您只需要3条记录,您可以在用户空间中执行此操作:
Playlist.order(updated_at: :desc).limit(3).any?{ |playlist| playlist.fullname == @last_fullname }