速度や使いやすさなど、さまざまなトレードオフがあり、いくつかの方法があります。ユーザーモデルにはhas_many :likes
関連性があると思います。
あなたは次のようなことをすることができます
current_user.likes.where(:likeable_type => 'Photo', :likeable_id => photo).exists?
これにより、表示された写真ごとに1つのdbクエリが実行されます(ただし、likesテーブルに適切なインデックスがある限り、非常に高速なクエリになります)。
もう1つのオプションは、すべてのユーザーのいいねを一度にロードし、likeable_idとlikeable_typeでインデックス付けされたハッシュに入れることです。これにはページごとに1つのクエリしか必要ありませんが、ユーザーがいいねをたくさん持っている場合は遅くなります-表示している写真のステータスを確認するためだけに3000のいいねをロードすることができます
もう1つのオプションは、表示している写真のいいねだけを読み込むことです。その配列があれば、photos
あなたはできる
likes = current_user.likes.where(:likeable_type => 'Photo', :likeable_id => photos)
これにより、単一のクエリが高速になり(ここでも、適切なインデックスがあると仮定して)、必要以上にいいねを取得することはありません。
liked = likes.inject({}) {|hash,like| hash[like.likeable_id]=true; hash}
次に、写真(IDで識別される)が高く評価されたかどうかを示すハッシュを提供します。liked[photo.id]