Rails 4:模型逻辑

时间:2016-09-15 20:02:31

标签: ruby-on-rails ruby ruby-on-rails-4 model rails-activerecord

一个简单的问题:

我有一个包含:id :user_id :item_id

的FavoriteItem模型

如何在循环中查看所有项目

- @items.each do |item|

...如果current_user已收藏某个项目?

=>例如:

current_user.id == 243
item.id == 53

此数据库条目存在于FavoriteItems中:

:id => 1, :user_id => 243, :item_id => 53

如果此项目被当前用户收藏,我如何检查我的循环?

我很感谢你的帮助!如果您需要更多信息,请告诉我。

2 个答案:

答案 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)

您可以使用mapinclude?

执行此操作
@items.each do |item|
  if item.favorited_items.map(&:user_id).include?(current_user.id)
    # yep, there's a match - do something
  end
end

如果您要使用此功能,可能需要在项目模型上创建范围。