Ruby on Rails,同时发送多封电子邮件

时间:2015-04-09 16:51:18

标签: ruby-on-rails ruby ruby-on-rails-3 email ruby-on-rails-4

好的,在我的RoR应用程序中,我有一个用户有偏好的影院系统,其中包括保存他们最喜欢的演员。我想要做的就是这样做,以便在添加新电影时,如果用户将任何电影的演员保存为他们的最爱,他们将收到一封电子邮件,通知他们电影。

我可以得到它,通过使用where语句,当添加电影时,数组中的FIRST用户通过电子邮件发送,films_controller:

def create
    @film = Film.new(film_params)
    if @film.save
        if not @film.cast1.blank?
            user1 = Perference.where(actor: @film.cast1).first.user
            if not user1.blank?
                actor = @film.cast1
                FavouriteActor.favourite_actor(user1, actor).deliver
            end
        end
        if not @film.cast2.blank?
            user2 = Perference.where(actor: @film.cast2).first.user
            if not user2.blank?
                actor = @film.cast2
                FavouriteActor.favourite_actor(user2, actor).deliver
            end
        end
        if not @film.cast3.blank?
            user3 = Perference.where(actor: @film.cast3).first.user
            if not user3.blank?
                actor = @film.cast3
                FavouriteActor.favourite_actor(user3, actor).deliver
            end
        end
        redirect_to @film
    else
        render 'new'
    end
end

然后转到favourite_actor.rb邮件程序:

class FavouriteActor < ApplicationMailer
 def favourite_actor(user, actor)
    @user = user
    @actor = actor
    @url  = 'http://localhost:3000/films'
    mail(to: @user.email, subject: 'Your favourite actor stars in a new film')
 end
end

然后发送favourite_actor.html.erb电子邮件

但是,我该怎么做才能取代这样的行:user1 = Perference.where(actor: @film.cast1).first.user,以便将所有与该演员最喜欢的用户通过电子邮件发送给我们?

2 个答案:

答案 0 :(得分:2)

您需要稍微更新一下您的查询:

preferences = Preference.where(["actor = ? OR actor = ? OR actor = ?", @film.cast1, @film.cast2, @film.cast3]).includes(:user)

preferences.each do |preference|
  FavoriteActor.favourite_actor(preference.user, actor).deliver
end

答案 1 :(得分:0)

也许尝试类似:

users = Preference.where(actor: @film.cast1)
users.each do |user|
  FavoriteActor.favourite_actor(user, actor).deliver
end

如果我理解你想要正确做什么,这将找到所有喜欢该演员的用户,遍历整个集并通过电子邮件发送每个用户。

相关问题