一个简单的问题:
我有一个包含:id :user_id :item_id
如何在循环中查看所有项目
- @items.each do |item|
...如果current_user
已收藏某个项目?
=>例如:
current_user.id == 243
item.id == 53
此数据库条目存在于FavoriteItems中:
:id => 1, :user_id => 243, :item_id => 53
如果此项目被当前用户收藏,我如何检查我的循环?
我很感谢你的帮助!如果您需要更多信息,请告诉我。
答案 0 :(得分:4)
您应该可以在单个数据库调用中执行此操作:
item.favorited_items.where(:user_id => current_user).exists?
你也可以在Item
:
def favorited_by?(user)
favorited_items.where(:user_id => user).exists?
end
然后在你的循环中说item.favorited_by?(current_user)
。
如果您循环播放大量items
,那么您可以预先计算当前用户的收藏,以避免n + 1次查询。
答案 1 :(得分:1)
您可以使用map
和include?
@items.each do |item|
if item.favorited_items.map(&:user_id).include?(current_user.id)
# yep, there's a match - do something
end
end
如果您要使用此功能,可能需要在项目模型上创建范围。