Ruby on rails Ruby on Rails,同时发送多封电子邮件
好的,在我的RoR应用程序中,我有一个影院系统,用户可以在其中设置偏好,包括保存他们最喜欢的演员。我想做的是,当添加一部新电影时,如果用户将电影中的任何演员保存为他们的最爱,他们将收到一封电子邮件,通知他们这部电影 此时,我可以通过使用where语句获得它,以便在添加影片时,向阵列中的第一个用户发送电子邮件,films\u controller: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
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