gpt4 book ai didi

ruby-on-rails - Rails N+1 查询使用时是否存在?在 ActiveRelation 上

转载 作者:行者123 更新时间:2023-12-04 16:45:38 24 4
gpt4 key购买 nike

我有一个模型:

class Event
has_many :participations
has_many :participants, :through => :participations, :source => user

def attending?(user)
participants.exists?(user)
end
end

我在使用的时候注意到了一个 N+1 查询问题,比如:
@events = Event.all
@events.each_with_index do |event, i|
if (event.attending?(current_user))
...
end
end

我想我可以通过使用包含来解决这个问题:
@events = Event.includes(:participants)

这并不能解决 N+1 查询问题。我对 Ruby 不是很好(这是一个附带项目),但是在调试 ActiveRecord.FinderMethods.exists? 的代码时,我相信它总是在构建新的关系并针对服务器执行此操作,无论包含什么。

是我对 exists? 的解释吗?正确的?如果没有,我怎样才能包含正确的东西来制作 exists?没有出现 N+1 查询问题?

最佳答案

作为引用,我最终通过以下方式解决了这个问题:

@events = Event.includes(:participants)


def attending?(user)
participants.where('user_id = ?', user.id)
end

关于ruby-on-rails - Rails N+1 查询使用时是否存在?在 ActiveRelation 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18887555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com