gpt4 book ai didi

ruby-on-rails - 我如何优化这个关联链?

转载 作者:太空宇宙 更新时间:2023-11-03 18:22:48 24 4
gpt4 key购买 nike

我有一个 Event 模型,它与一个 Service 模型有一个 many-to-many 关联

用户可以创建一个事件并选择为该事件标记哪些服务。

用户可以订阅服务,当创建事件时,如果用户订阅了在该事件中标记的服务,则应通知用户。

此外,User 模型与 Email 模型有一个has_many 关联。

我希望能够获取所有电子邮件地址的数组,以便向订阅者发送通知。

这是我所拥有的:

class Event < ActiveRecord::Base

has_many :event_services, :dependent => :destroy
has_many :services, :through => :event_services

def recipients
recipients = services.each_with_object(arr = []) do |service|
service.users.each do |user|
user.emails.each do |email|
arr << email.address
end
end
end
end
recipients.uniq
end

这行得通,但它非常丑陋且效率不高。我将如何优化它?

这是我的电子邮件模型:

class Email < ActiveRecord::Base
attr_accessible :address, :user_id
belongs_to :user
end

最佳答案

使用单个 SQL 请求会更高效 以下请求,使用 multiple joins ,应该工作:

def recipients
Email.joins(:user => {:services => :event_services}).where(:event_services => {:event_id => self.id}).pluck(:address).uniq
end

关于ruby-on-rails - 我如何优化这个关联链?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15298397/

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