2016-09-21 30 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