1

Eventモデルとmany-to-many関連付けられたモデルServiceがあります

ユーザーはイベントを作成し、そのイベントにタグ付けするサービスを選択できます。

ユーザーはサービスにサブスクライブできます。イベントが作成されると、そのイベントでタグ付けされたサービスにユーザーがサブスクライブしているかどうかをユーザーに通知する必要があります。

さらに、Userモデルにはモデルhas_manyへの関連付けがありEmailます。

サブスクライバーに通知を送信できるように、すべての電子メール アドレスの配列を取得できるようにしたいと考えています。

ここに私が持っているものがあります:

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
4

1 に答える 1