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

Ruby on rails Ruby on Rails,同时发送多封电子邮件,ruby-on-rails,ruby,ruby-on-rails-3,email,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 3,Email,Ruby On Rails 4,好的,在我的RoR应用程序中,我有一个影院系统,用户可以在其中设置偏好,包括保存他们最喜欢的演员。我想做的是,当添加一部新电影时,如果用户将电影中的任何演员保存为他们的最爱,他们将收到一封电子邮件,通知他们这部电影 此时,我可以通过使用where语句获得它,以便在添加影片时,向阵列中的第一个用户发送电子邮件,films\u controller: def create @film = Film.new(film_params) if @film.save if n

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

此时,我可以通过使用where语句获得它,以便在添加影片时,向阵列中的第一个用户发送电子邮件,films\u 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
然后转到
favorite\u actor.rb
mailer:

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
class-favoriteActor
然后发送
favorite\u actor.html.erb
电子邮件


但是我能做些什么来替换这些行,比如:
user1=Perference.where(actor:@film.cast1)。first.user
,这样所有喜欢该演员的用户都会收到电子邮件

或许可以尝试以下方法:

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

如果我了解您希望正确执行的操作,这将找到所有具有该最喜爱的参与者的用户,对集合进行迭代并向每个人发送电子邮件。

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

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

这会出现在films#u controller中吗?我得到一个错误:
undefined method
include'for#`['在您的第一行中噢!输入错误。更正了它。它应该是
包含
我现在得到了这个错误:
在Perference上找不到名为“users”的关联;可能是您拼错了?
我得到了上面的错误,但是它们之间有正确的关联这将抛出错误,因为您将preference obj作为
favou的第一个参数传递rite_actor
方法,该方法应为用户obj