2016-09-21 4 views
0

私はRuby on Railsの比較で問題があります。フルネームがデータベース内の最後の3つの更新されたレコードであるかどうか確認したい。何らかの理由でデータベース全体をチェックします。Rails - モデルの最後の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 

構文が正しいか、または分割する必要があるかどうかは不明です。それは私にエラーを与えることはありませんが、結果は期待されているものではありません。

EDIT:期待される結果は、レコードが最後に更新さ3内にない場合、それは「見つからない記録」を与えるべきであるということですレコードが最後の3つ以内に更新されている場合は、「最新の3つの更新されたレコードにレコードが存在する」ことを通知する必要があります。それが最後に更新さ3ではありません本家何@last_fullnameがデータベースに存在するとき、私は取得していますが、それは常に与えるということです

「のレコードは、最後の3つの更新されたレコードに存在します」。

データベースに存在しないときに「レコードが見つかりません」と表示されます。

+0

実際の結果と予想される結果を表示してください。 – davidhu2000

+0

'where'句ではなく、最後の3つのレコードクエリの外側で' full_name'を検索する必要があります。 – d34n5

答えて

4

は、あなただけのサブクエリとデータベースレベルでこれを達成することができます:最後の3つのレコードを選択し、それらの最後の3つの記録からフルネームを検索します。サンプルクエリでは、指定されたフルネームのすべてのレコードを検索し、updated_atでソートします。 3つのレコードしか必要ないと仮定すると、ユーザー空間でこれを行うことができます。

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

説明のために@bcdに感謝します。これは問題を解決しました。 – Samuel

関連する問題