2016-09-21 58 views
0

的最新3条更新记录的对比我遇到了Ruby on Rails中的比较问题。我想检查一个全名是否是数据库中最近3次更新的记录。由于某种原因,它会检查整个数据库。Rails - 型号

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

请向我们展示实际结果和预期结果。 – davidhu2000

+0

您应该在最后3条记录查询之外搜索“full_name”,而不是在where子句中搜索。 – d34n5

回答

4

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

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

感谢@ bcd的解释。这解决了这个问题。 – Samuel